<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML
><HEAD
><TITLE
>Index</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
REL="HOME"
TITLE="Advanced Bash-Scripting Guide"
HREF="index.html"><LINK
REL="PREVIOUS"
TITLE="ASCII Table"
HREF="asciitable.html"></HEAD
><BODY
CLASS="INDEX"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Advanced Bash-Scripting Guide: </TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="asciitable.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
>&nbsp;</TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="INDEX"
><H1
><A
NAME="XREFINDEX"
></A
>Index</H1
><P
>This index / glossary / quick-reference lists many of the
	important topics covered in the text. Terms are arranged
	in <EM
>approximate</EM
> ASCII sorting order,
	<EM
>modified as necessary</EM
> for enhanced
	clarity.</P
><P
>Note that <EM
>commands</EM
> are indexed
	in <A
HREF="part4.html#PART4A"
>Part 4</A
>.</P
><P
>* * *</P
><P
><B
CLASS="COMMAND"
>^ </B
> (caret)
         <P
></P
><UL
><LI
><P
>	   <A
HREF="special-chars.html#BEGLINEREF"
>Beginning-of-line</A
>,
	   in a <A
HREF="regexp.html#REGEXREF"
>Regular Expression</A
>
	   </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>^</B
></P
><P
><B
CLASS="COMMAND"
>^^</B
></P
><P
><A
HREF="bashver4.html#CASEMODPARAMSUB"
>Uppercase
       conversion</A
> in <I
CLASS="FIRSTTERM"
>parameter
       substitution</I
></P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>~ </B
> <I
CLASS="FIRSTTERM"
>Tilde</I
>
         <P
></P
><UL
><LI
><P
>	 <B
CLASS="COMMAND"
>~ </B
>
         <A
HREF="special-chars.html#TILDEREF"
>home directory</A
>, corresponds
           to <A
HREF="internalvariables.html#HOMEDIRREF"
><TT
CLASS="VARNAME"
>$HOME</TT
></A
>
          </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>~/ </B
>
	 <A
HREF="special-chars.html#TILDEREF"
> <I
CLASS="FIRSTTERM"
>Current user's</I
>
	   home directory</A
>
          </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>~+ </B
>
         <A
HREF="special-chars.html#WORKINGDIRREF"
><EM
>Current</EM
>
         working directory</A
>
          </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>~- </B
>
         <A
HREF="special-chars.html#PREVWORKINGDIR"
><EM
>Previous</EM
>
         working directory</A
>
          </P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>= </B
> <I
CLASS="FIRSTTERM"
>Equals</I
> sign
         <P
></P
><UL
><LI
><P
>            <B
CLASS="COMMAND"
>= </B
>
         <A
HREF="varassignment.html#EQREF"
>Variable assignment</A
> operator
          </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>= </B
>
         <A
HREF="comparison-ops.html#SCOMPARISON1"
>String comparison</A
> operator
          </P
><P
>            <B
CLASS="COMMAND"
>== </B
>
        <A
HREF="comparison-ops.html#SCOMPARISON2"
>String comparison</A
> operator
          </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>=~ </B
>
            <I
CLASS="FIRSTTERM"
>Regular Expression</I
>
	    <A
HREF="bashver3.html#REGEXMATCHREF"
>match</A
> operator
          </P
><P
><A
HREF="contributed-scripts.html#FINDSPLIT0"
><I
CLASS="FIRSTTERM"
>Example
	     script</I
></A
></P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>&#60; </B
> Left angle bracket
         <P
></P
><UL
><LI
><P
>Is-less-than</P
><P
><A
HREF="comparison-ops.html#LTREF"
>String comparison</A
></P
><P
>         <A
HREF="comparison-ops.html#INTLT"
>Integer comparison</A
> within
	 <A
HREF="dblparens.html"
>double parentheses</A
>
          </P
></LI
><LI
><P
>Redirection</P
><P
>            <B
CLASS="COMMAND"
>&#60; </B
>
         <A
HREF="io-redirection.html#IOREDIRECTIONREF2"
><TT
CLASS="FILENAME"
>stdin</TT
></A
>
          </P
><P
>            <B
CLASS="COMMAND"
>&#60;&#60; </B
>
         <A
HREF="special-chars.html#HEREDOCRRREF"
><I
CLASS="FIRSTTERM"
>Here document</I
></A
>
          </P
><P
>            <B
CLASS="COMMAND"
>&#60;&#60;&#60; </B
>
         <A
HREF="special-chars.html#HERESTRINGREF"
><I
CLASS="FIRSTTERM"
>Here string</I
></A
>
          </P
><P
>            <B
CLASS="COMMAND"
>&#60;&#62; </B
>
         <A
HREF="special-chars.html#REDIRRW"
>Opening a file</A
> for
         <EM
>both</EM
> reading and writing
          </P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>&#62; </B
> Right angle bracket
         <P
></P
><UL
><LI
><P
>Is-greater-than</P
><P
><A
HREF="comparison-ops.html#GTREF"
>String comparison</A
></P
><P
><A
HREF="comparison-ops.html#INTGT"
>Integer comparison</A
>,
            within <I
CLASS="FIRSTTERM"
>double parentheses</I
>
          </P
></LI
><LI
><P
>Redirection</P
><P
><B
CLASS="COMMAND"
>&#62; </B
>
         <A
HREF="io-redirection.html#IOREDIRECTIONREF"
>Redirect
         <TT
CLASS="FILENAME"
>stdout</TT
></A
> to a file
          </P
><P
>            <B
CLASS="COMMAND"
>&#62;&#62; </B
>
         <A
HREF="io-redirection.html#IOREDIRECTIONREF"
>Redirect
         <TT
CLASS="FILENAME"
>stdout</TT
></A
> to a file,
         but <I
CLASS="FIRSTTERM"
>append</I
>
          </P
><P
><B
CLASS="COMMAND"
>i&#62;&#38;j </B
>
            <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>Redirect
	    <I
CLASS="FIRSTTERM"
>file descriptor</I
>
	    <TT
CLASS="FILENAME"
>i</TT
></A
> to
	    <I
CLASS="FIRSTTERM"
>file descriptor</I
>
	    <TT
CLASS="FILENAME"
>j</TT
></P
><P
>            <B
CLASS="COMMAND"
>&#62;&#38;j </B
>
            <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>Redirect
	    <TT
CLASS="FILENAME"
>stdout</TT
></A
> to
	    <I
CLASS="FIRSTTERM"
>file descriptor</I
>
	    <TT
CLASS="FILENAME"
>j</TT
></P
><P
>            <B
CLASS="COMMAND"
>&#62;&#38;2 </B
>
         <A
HREF="special-chars.html#REDIROUTERROR2"
>Redirect
	    <TT
CLASS="FILENAME"
>stdout</TT
></A
> of a command to
	    <TT
CLASS="FILENAME"
>stderr</TT
></P
><P
>            <B
CLASS="COMMAND"
>2&#62;&#38;1 </B
>
         <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>Redirect
	    <TT
CLASS="FILENAME"
>stderr</TT
></A
>
	    to <TT
CLASS="FILENAME"
>stdout</TT
></P
><P
>            <B
CLASS="COMMAND"
>&#38;&#62; </B
>
         <A
HREF="special-chars.html#REDIROUTERROR"
>Redirect
	    <EM
>both</EM
> <TT
CLASS="FILENAME"
>stdout</TT
>
	    and <TT
CLASS="FILENAME"
>stderr</TT
></A
> of a command to a
	    file</P
><P
><B
CLASS="COMMAND"
>:&#62; <TT
CLASS="FILENAME"
>file</TT
></B
>
         <A
HREF="io-redirection.html#IOREDIRECTIONREF"
>Truncate file</A
>
          to zero length</P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>| </B
>
         <A
HREF="special-chars.html#PIPEREF"
>Pipe</A
>, a device for passing the output
         of a command to another command or to the shell</P
><P
><B
CLASS="COMMAND"
>|| </B
>
         <A
HREF="ops.html#ORREF"
>Logical OR test operator</A
></P
><P
><B
CLASS="COMMAND"
>- </B
> (dash)
         <P
></P
><UL
><LI
><P
>        <A
HREF="parameter-substitution.html#DEFPARAM1"
>Prefix to <I
CLASS="FIRSTTERM"
>default
	  parameter</I
></A
>, in <I
CLASS="FIRSTTERM"
>parameter
	  substitution</I
></P
></LI
><LI
><P
>        <A
HREF="special-chars.html#DASHREF"
>Prefix to <I
CLASS="FIRSTTERM"
>option
          flag</I
></A
></P
></LI
><LI
><P
>        <A
HREF="special-chars.html#DASHREF2"
>Indicating
        <I
CLASS="FIRSTTERM"
>redirection</I
></A
> from
        <TT
CLASS="FILENAME"
>stdin</TT
> or <TT
CLASS="FILENAME"
>stdout</TT
>
          </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-- </B
> (double-dash)</P
><P
><A
HREF="special-chars.html#DOUBLEDASHREF"
>Prefix to
	     <I
CLASS="FIRSTTERM"
>long</I
> command options</A
></P
><P
>         <A
HREF="dblparens.html#PLUSPLUSREF"
><I
CLASS="FIRSTTERM"
>C-style</I
>
	 variable decrement</A
> within <A
HREF="dblparens.html#DBLPARENSREF"
>double
	 parentheses</A
>
          </P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>; </B
> (semicolon)
	   <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#SEMICOLONREF"
>As command
        separator</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>\; </B
>
         <A
HREF="moreadv.html#FINDREF0"
><I
CLASS="FIRSTTERM"
>Escaped</I
> semicolon</A
>,
	 terminates a <A
HREF="moreadv.html#FINDREF"
>find</A
>
	 command</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>;; </B
>
         <A
HREF="special-chars.html#DOUBLESEMICOLON"
>Double-semicolon</A
>, terminator in a
         <A
HREF="testbranch.html#CASEESAC1"
>case</A
> option</P
><P
>Required when ...</P
><P
><A
HREF="loops1.html#NEEDSEMICOLON"
><I
CLASS="FIRSTTERM"
>do</I
>
         keyword is on the first line of
	 <I
CLASS="FIRSTTERM"
>loop</I
></A
></P
><P
><A
HREF="gotchas.html#OMITSEMICOLON"
>         terminating <I
CLASS="FIRSTTERM"
>curly-bracketed</I
>
	 code block</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>;;&#38;</B
> <B
CLASS="COMMAND"
>;&#38;</B
>
        <A
HREF="bashver4.html#NCTERM"
>Terminators</A
> in
	a <I
CLASS="FIRSTTERM"
>case</I
> option (<A
HREF="bashver4.html#BASH4REF"
>version 4+</A
> of Bash).</P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
>:</B
> Colon
	   <P
></P
><UL
><LI
><P
>            <B
CLASS="COMMAND"
>:&#62; <TT
CLASS="FILENAME"
>filename</TT
></B
>
         <A
HREF="io-redirection.html#IOREDIRECTIONREF"
>Truncate file</A
>
          to zero length</P
></LI
><LI
><P
><A
HREF="special-chars.html#NULLREF"
><I
CLASS="FIRSTTERM"
>null</I
>
	 command</A
>, equivalent to the
         <A
HREF="internal.html#TRUEREF"
>true</A
> Bash
         builtin</P
></LI
><LI
><P
>Used in an <A
HREF="here-docs.html#ANONHEREDOC0"
>anonymous
	 here document</A
></P
></LI
><LI
><P
>Used in an <A
HREF="special-chars.html#COLONINFUNCTION"
>otherwise
	 empty function</A
></P
></LI
><LI
><P
>Used as a <A
HREF="functions.html#FSTRANGEREF"
>function
	 name</A
></P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
>! </B
>
         <A
HREF="special-chars.html#NOTREF"
>Negation operator</A
>, inverts <A
HREF="exit-status.html#NEGCOND"
>exit status</A
> of a test or command
           <P
></P
><UL
><LI
><P
><B
CLASS="COMMAND"
>!= </B
>
         <A
HREF="comparison-ops.html#NOTEQUAL"
>not-equal-to</A
>
	 String comparison operator</P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
>? </B
> (question mark)
         <P
></P
><UL
><LI
><P
>        <A
HREF="x17129.html#QUEXREGEX"
>Match zero or one characters</A
>,
	in an <A
HREF="x17129.html#EXTREGEX"
> Extended Regular
	Expression</A
></P
></LI
><LI
><P
><A
HREF="special-chars.html#QUEXWC"
>Single-character
	<I
CLASS="FIRSTTERM"
>wild card</I
></A
>,
	in <A
HREF="globbingref.html"
>globbing</A
></P
></LI
><LI
><P
>In a
        <A
HREF="special-chars.html#CSTRINARY"
><I
CLASS="FIRSTTERM"
>C</I
>-style
        Trinary operator</A
></P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
>// </B
>
        <A
HREF="internal.html#DOUBLESLASHREF"
>Double forward slash</A
>,
          behavior of <A
HREF="internal.html#CDREF"
>cd</A
> command toward</P
><P
><B
CLASS="COMMAND"
>. </B
> (dot / period)
         <P
></P
><UL
><LI
><P
>            <B
CLASS="COMMAND"
>. </B
>
         <A
HREF="special-chars.html#DOTREF"
>Load a file</A
> (into a script),
         equivalent to <A
HREF="internal.html#SOURCEREF"
>source</A
> command
	 </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>. </B
>
         <A
HREF="x17129.html#REGEXDOT"
>Match single character</A
>,
         in a <A
HREF="regexp.html#REGEXREF"
>Regular Expression</A
>
	 </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>. </B
>
         <A
HREF="special-chars.html#DOTDIRECTORY"
>Current working
         directory</A
>
	 </P
><P
>            <B
CLASS="COMMAND"
>./ </B
>
         <A
HREF="internalvariables.html#CURRENTWDREF"
>Current working
          directory</A
>
	 </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>.. </B
>
         <A
HREF="special-chars.html#DOTDIRECTORY"
><I
CLASS="FIRSTTERM"
>Parent</I
>
         directory</A
>
	 </P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>' ... '</B
>
	 (single quotes)
         <A
HREF="varsubn.html#SNGLQUO"
><I
CLASS="FIRSTTERM"
>strong</I
>
         quoting</A
></P
><P
><B
CLASS="COMMAND"
>" ... " </B
>
         (double quotes)
         <A
HREF="varsubn.html#DBLQUO"
><I
CLASS="FIRSTTERM"
>weak</I
>
         quoting</A
>
	   <P
></P
><UL
><LI
><P
><A
HREF="quotingvar.html#QUOTINGBSL"
><I
CLASS="FIRSTTERM"
>Double-quoting</I
>
	       the <I
CLASS="FIRSTTERM"
>backslash</I
> (<B
CLASS="COMMAND"
>\</B
>)
	       character</A
></P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>,</B
>
        <P
></P
><UL
><LI
><P
>         <A
HREF="ops.html#COMMAOP"
>Comma operator</A
>
	 </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>,</B
></P
><P
><B
CLASS="COMMAND"
>,,</B
></P
><P
><A
HREF="bashver4.html#CASEMODPARAMSUB"
>Lowercase
            conversion</A
> in <I
CLASS="FIRSTTERM"
>parameter
            substitution</I
></P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>() </B
> Parentheses
         <P
></P
><UL
><LI
><P
><B
CLASS="COMMAND"
>( ... ) </B
>
         <A
HREF="special-chars.html#PARENSREF"
>Command group</A
>;
	 starts a
	 <A
HREF="subshells.html#SUBSHELLSREF"
>subshell</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>( ... ) </B
>
         <A
HREF="x17129.html#PARENGRPS"
>Enclose group</A
>
	 of <I
CLASS="FIRSTTERM"
>Extended Regular
	 Expressions</I
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>&#62;( ... )</B
></P
><P
><B
CLASS="COMMAND"
>&#60;( ... ) </B
>
      <A
HREF="process-sub.html#PROCESSSUBREF"
>Process substitution</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
> ... ) </B
>
         <A
HREF="testbranch.html#CASEPAREN"
>Terminates test-condition</A
>
	 in <I
CLASS="FIRSTTERM"
>case</I
> construct</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>(( ... )) </B
>
         <A
HREF="dblparens.html#DBLPARENSREF"
>Double parentheses</A
>,
         in arithmetic expansion</P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
>[ </B
> <A
HREF="special-chars.html#LEFTBRACKET"
>Left bracket</A
>,
        <I
CLASS="FIRSTTERM"
>test</I
> construct</P
><P
><B
CLASS="COMMAND"
>[ ]</B
>Brackets
         <P
></P
><UL
><LI
><P
><A
HREF="arrays.html#BRACKARRAY"
><I
CLASS="FIRSTTERM"
>Array</I
>
        element</A
></P
></LI
><LI
><P
><A
HREF="x17129.html#BRACKETSREF"
>Enclose character set
        to match</A
> in a <I
CLASS="FIRSTTERM"
>Regular
	Expression</I
></P
></LI
><LI
><P
><A
HREF="special-chars.html#BRACKTEST"
><I
CLASS="FIRSTTERM"
>Test</I
> construct</A
></P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
>[[ ... ]]</B
>
         <A
HREF="testconstructs.html#DBLBRACKETS"
>Double brackets</A
>,
	 extended <I
CLASS="FIRSTTERM"
>test</I
> construct</P
><P
><B
CLASS="COMMAND"
>$ </B
>
        <A
HREF="x17129.html#DOLLARSIGNREF"
><I
CLASS="FIRSTTERM"
>Anchor</I
></A
>,
          in a <A
HREF="regexp.html#REGEXREF"
>Regular Expression</A
></P
><P
><B
CLASS="COMMAND"
>$ </B
>
         <A
HREF="varsubn.html"
>Prefix to a variable name</A
></P
><P
><B
CLASS="COMMAND"
>$( ... ) </B
>
         <A
HREF="varassignment.html#COMMANDSUBREF0"
>Command substitution</A
>,
	 setting a variable with output of a command,
	 using parentheses notation</P
><P
><B
CLASS="COMMAND"
>` ... ` </B
>
         <A
HREF="commandsub.html#BACKQUOTESREF"
>Command substitution</A
>,
	 using <A
HREF="special-chars.html#BACKTICKSREF"
>backquotes</A
>
	 notation</P
><P
><B
CLASS="COMMAND"
>$[ ... ]</B
>
        <A
HREF="special-chars.html#BRACKETARITH"
>Integer expansion</A
>
	(deprecated)</P
><P
><B
CLASS="COMMAND"
>${ ... }</B
> Variable manipulation / evaluation

         <P
></P
><UL
><LI
><P
><B
CLASS="COMMAND"
>${var}</B
>
      <A
HREF="parameter-substitution.html#PSSUB1"
>Value of a variable</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${#var}</B
>
      <A
HREF="parameter-substitution.html#PSOREX1"
>Length of a variable</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${#@}</B
></P
><P
><B
CLASS="COMMAND"
>${#*}</B
>
        <A
HREF="parameter-substitution.html#NUMPOSPARAM"
>Number of
	 <I
CLASS="FIRSTTERM"
>positional
	 parameters</I
></A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${parameter?err_msg}</B
>
         <A
HREF="parameter-substitution.html#QERRMSG"
>Parameter-unset
        message</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${parameter-default}</B
></P
><P
><B
CLASS="COMMAND"
>${parameter:-default}</B
></P
><P
><B
CLASS="COMMAND"
>${parameter=default}</B
></P
><P
><B
CLASS="COMMAND"
>${parameter:=default}</B
>
      <A
HREF="parameter-substitution.html#DEFPARAM1"
>Set default
      parameter</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${parameter+alt_value}</B
></P
><P
><B
CLASS="COMMAND"
>${parameter:+alt_value}</B
></P
><P
><A
HREF="parameter-substitution.html#PARAMALTV"
>Alternate value</A
>
          of parameter, if set</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${!var}</B
></P
><P
><A
HREF="ivr.html#IVR2"
>Indirect referencing of a variable</A
>,
	   new notation</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${!#}</B
></P
><P
><A
HREF="othertypesv.html#LASTARGREF"
>Final <I
CLASS="FIRSTTERM"
>positional
           parameter</I
></A
>.
	   (This is an <I
CLASS="FIRSTTERM"
>indirect reference</I
> to
	   <A
HREF="internalvariables.html#CLACOUNTREF"
>$#</A
>.)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${!varprefix*}</B
></P
><P
><B
CLASS="COMMAND"
>${!varprefix@}</B
></P
><P
><A
HREF="parameter-substitution.html#VARPREFIXM"
>Match
        <EM
>names</EM
></A
> of all previously declared
        variables beginning with <TT
CLASS="VARNAME"
>varprefix</TT
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${string:position}</B
></P
><P
><B
CLASS="COMMAND"
>${string:position:length}</B
>
      <A
HREF="string-manipulation.html#SUBSTREXTR01"
>Substring
      extraction</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${var#Pattern}</B
></P
><P
><B
CLASS="COMMAND"
>${var##Pattern}</B
>
      <A
HREF="parameter-substitution.html#PSOREX2"
>Substring
      removal</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${var%Pattern}</B
></P
><P
><B
CLASS="COMMAND"
>${var%%Pattern}</B
>
      <A
HREF="parameter-substitution.html#PCTPATREF"
>Substring
        removal</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>${string/substring/replacement}</B
></P
><P
><B
CLASS="COMMAND"
>${string//substring/replacement}</B
></P
><P
><B
CLASS="COMMAND"
>${string/#substring/replacement}</B
></P
><P
><B
CLASS="COMMAND"
>${string/%substring/replacement}</B
>
      <A
HREF="string-manipulation.html#SUBSTRREPL00"
>Substring
      replacement</A
></P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
>$' ... '</B
>
        <A
HREF="escapingsection.html#STRQ"
>String expansion</A
>,
	using <I
CLASS="FIRSTTERM"
>escaped</I
> characters.</P
><P
><B
CLASS="COMMAND"
>\ </B
>
         <A
HREF="escapingsection.html#ESCP"
>Escape</A
> the character following
	    <P
></P
><UL
><LI
><P
><B
CLASS="COMMAND"
>\&#60; ... \&#62; </B
>
         <A
HREF="x17129.html#ANGLEBRAC"
>Angle brackets</A
>,
         <I
CLASS="FIRSTTERM"
>escaped</I
>,
	 word boundary in a <A
HREF="regexp.html#REGEXREF"
>Regular
	 Expression</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>\{ N \}</B
>
         <A
HREF="x17129.html#ESCPCB"
><SPAN
CLASS="QUOTE"
>"Curly"</SPAN
> brackets</A
>,
         <I
CLASS="FIRSTTERM"
>escaped</I
>,
	 number of character sets to match in an <A
HREF="x17129.html#EXTREGEX"
>Extended RE</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>\; </B
>
         <A
HREF="moreadv.html#FINDREF0"
><I
CLASS="FIRSTTERM"
>Semicolon</I
></A
>,
         <I
CLASS="FIRSTTERM"
>escaped</I
>,
	 terminates a <A
HREF="moreadv.html#FINDREF"
>find</A
>
	 command</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>\$$ </B
> <A
HREF="ivr.html#IVRREF"
>Indirect
        reverencing of a variable</A
>, old-style notation</P
></LI
><LI
><P
><A
HREF="escapingsection.html#ESCNEWLINE"
>Escaping
        a <I
CLASS="FIRSTTERM"
>newline</I
></A
>,
	to write a multi-line command</P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
>&#38; </B
>
         <P
></P
><UL
><LI
><P
>            <B
CLASS="COMMAND"
>&#38;&#62; </B
>
         <A
HREF="special-chars.html#REDIROUTERROR"
>Redirect
	    <EM
>both</EM
> <TT
CLASS="FILENAME"
>stdout</TT
>
	    and <TT
CLASS="FILENAME"
>stderr</TT
></A
> of a command to a
	    file</P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>&#62;&#38;j </B
>
            <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>Redirect
	    <TT
CLASS="FILENAME"
>stdout</TT
></A
> to
	    <I
CLASS="FIRSTTERM"
>file descriptor</I
>
	    <I
CLASS="FIRSTTERM"
>j</I
></P
><P
>            <B
CLASS="COMMAND"
>&#62;&#38;2 </B
>
         <A
HREF="special-chars.html#REDIROUTERROR2"
>Redirect
	    <TT
CLASS="FILENAME"
>stdout</TT
></A
> of a command to
	    <TT
CLASS="FILENAME"
>stderr</TT
></P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
>i&#62;&#38;j </B
>
            <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>Redirect
	    <I
CLASS="FIRSTTERM"
>file descriptor</I
></A
>
	    <I
CLASS="FIRSTTERM"
>i</I
> to
	    <I
CLASS="FIRSTTERM"
>file descriptor</I
>
	    <I
CLASS="FIRSTTERM"
>j</I
></P
><P
>            <B
CLASS="COMMAND"
>2&#62;&#38;1 </B
>
         <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>Redirect
	    <TT
CLASS="FILENAME"
>stderr</TT
></A
> to
	    <TT
CLASS="FILENAME"
>stdout</TT
></P
></LI
><LI
><P
><A
HREF="io-redirection.html#CFD"
>Closing <I
CLASS="FIRSTTERM"
>file
      descriptors</I
></A
></P
><P
><B
CLASS="COMMAND"
>n&#60;&#38;-</B
>
           Close input file descriptor
	   <I
CLASS="FIRSTTERM"
>n</I
></P
><P
><B
CLASS="COMMAND"
>0&#60;&#38;-</B
>,
	   <B
CLASS="COMMAND"
>&#60;&#38;-</B
>
           Close <TT
CLASS="FILENAME"
>stdin</TT
></P
><P
><B
CLASS="COMMAND"
>n&#62;&#38;-</B
>
          Close output file descriptor
	  <I
CLASS="FIRSTTERM"
>n</I
></P
><P
><B
CLASS="COMMAND"
>1&#62;&#38;-</B
>,
	   <B
CLASS="COMMAND"
>&#62;&#38;-</B
>
	   Close <TT
CLASS="FILENAME"
>stdout</TT
></P
></LI
><LI
><P
>	    <B
CLASS="COMMAND"
>&#38;&#38; </B
>
	    <A
HREF="special-chars.html#LOGICALAND"
>Logical AND
	    test operator</A
></P
></LI
><LI
><P
>	    <B
CLASS="COMMAND"
>Command &#38;</B
>
	    <A
HREF="special-chars.html#BGJOB"
>Run job in
            <I
CLASS="FIRSTTERM"
>background</I
></A
></P
></LI
></UL
></P
><P
><B
CLASS="COMMAND"
># </B
>
         <A
HREF="special-chars.html#HASHMARKREF"
>Hashmark</A
>,
         special symbol beginning a script
         <I
CLASS="FIRSTTERM"
>comment</I
></P
><P
><B
CLASS="COMMAND"
>#!</B
>
         <A
HREF="sha-bang.html#SHABANGREF"
>Sha-bang</A
>,
         special string starting a
         <A
HREF="part1.html#WHATSASCRIPT"
>shell script</A
></P
><P
><B
CLASS="COMMAND"
>* </B
> Asterisk
         <P
></P
><UL
><LI
><P
>         <A
HREF="special-chars.html#ASTERISKREF"
><I
CLASS="FIRSTTERM"
>Wild
         card</I
></A
>,
	 in <A
HREF="globbingref.html"
>globbing</A
>
	 </P
></LI
><LI
><P
>         <A
HREF="special-chars.html#ASTERISKREF2"
>Any number of characters</A
>
	 in a <A
HREF="regexp.html#REGEXREF"
>Regular Expression</A
>
	 </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
> ** </B
>
         <A
HREF="ops.html#EXPONENTIATIONREF"
>Exponentiation</A
>,
	 arithmetic operator
	 </P
></LI
><LI
><P
>            <B
CLASS="COMMAND"
> ** </B
>
	 Extended <I
CLASS="FIRSTTERM"
>globbing</I
>
         <A
HREF="bashver4.html#GLOBSTARREF"
>file-match operator</A
>
	 </P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>% </B
> Percent sign
         <P
></P
><UL
><LI
><P
>         <A
HREF="ops.html#MODULOREF"
>Modulo</A
>, division-remainder
         arithmetic operation
	 </P
></LI
><LI
><P
>         <A
HREF="parameter-substitution.html#PCTPATREF"
>Substring removal</A
>
	   (pattern matching) operator</P
></LI
></UL
>
	 </P
><P
><B
CLASS="COMMAND"
>+ </B
> Plus sign
         <P
></P
><UL
><LI
><P
><A
HREF="x17129.html#PLUSREF"
><I
CLASS="FIRSTTERM"
>Character
           match</I
></A
>, in an <A
HREF="x17129.html#EXTREGEX"
>extended Regular
           Expression</A
></P
></LI
><LI
><P
><A
HREF="parameter-substitution.html#PARAMALTV"
>Prefix to
	   <I
CLASS="FIRSTTERM"
>alternate parameter</I
></A
>, in
	   <I
CLASS="FIRSTTERM"
>parameter substitution</I
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
> ++ </B
>
           <A
HREF="dblparens.html#PLUSPLUSREF"
><I
CLASS="FIRSTTERM"
>C-style</I
>
           variable increment</A
>, within
           <A
HREF="dblparens.html#DBLPARENSREF"
>double
           parentheses</A
></P
></LI
></UL
></P
><P
>* * *</P
><P
><I
CLASS="FIRSTTERM"
>Shell Variables</I
></P
><P
><B
CLASS="COMMAND"
>$_ </B
>
        <A
HREF="internalvariables.html#UNDERSCOREREF"
>Last argument to previous
	command</A
></P
><P
><B
CLASS="COMMAND"
>$- </B
>
        <A
HREF="internalvariables.html#FLPREF"
>Flags passed to script</A
>, using <A
HREF="internal.html#SETREF"
>set</A
></P
><P
><B
CLASS="COMMAND"
>$! </B
>
         <A
HREF="internalvariables.html#PIDVARREF"
><I
CLASS="FIRSTTERM"
>Process ID</I
>
         of last background job</A
></P
><P
><B
CLASS="COMMAND"
>$? </B
>
         <A
HREF="exit-status.html#EXSREF"
><I
CLASS="FIRSTTERM"
>Exit
         status</I
> of a command</A
></P
><P
><B
CLASS="COMMAND"
>$@ </B
>
         All the <I
CLASS="FIRSTTERM"
>positional parameters</I
>, <A
HREF="internalvariables.html#APPREF2"
>as <EM
>separate</EM
>
         words</A
></P
><P
><B
CLASS="COMMAND"
> $* </B
>
         All the <I
CLASS="FIRSTTERM"
>positional parameters</I
>, <A
HREF="internalvariables.html#APPREF"
>as a <EM
>single</EM
>
         word</A
></P
><P
><B
CLASS="COMMAND"
>$$ </B
>
         <A
HREF="special-chars.html#PROCESSIDREF"
>Process ID</A
> of the
         script</P
><P
><B
CLASS="COMMAND"
>$# </B
>
         <A
HREF="internalvariables.html#CLACOUNTREF"
>Number of arguments passed</A
> to a
         <A
HREF="functions.html#FUNCTIONREF"
>function</A
>, or to the script
         itself</P
><P
><B
CLASS="COMMAND"
>$0 </B
>
         <A
HREF="othertypesv.html#SCRNAMEPARAM"
>Filename of the script</A
></P
><P
><B
CLASS="COMMAND"
>$1 </B
>
         <A
HREF="othertypesv.html#POSPARAMREF1"
>First argument passed to script</A
></P
><P
><B
CLASS="COMMAND"
>$9 </B
>
         <A
HREF="othertypesv.html#POSPARAMREF1"
>Ninth argument passed to script</A
></P
><P
><A
HREF="refcards.html#SPECSHVARTAB"
><B
CLASS="COMMAND"
>Table</B
></A
>
        of <I
CLASS="FIRSTTERM"
>shell variables</I
></P
><P
>* * * * * *</P
><P
><B
CLASS="COMMAND"
>-a </B
>
        <A
HREF="comparison-ops.html#COMPOUNDAND"
>Logical AND</A
>
	compound comparison test</P
><P
>Address database, <A
HREF="testbranch.html#EX30"
>script
        example</A
></P
><P
><I
CLASS="FIRSTTERM"
>Advanced Bash Scripting Guide</I
>,
         <A
HREF="mirrorsites.html#WHERE_TARBALL"
>where to download</A
></P
><P
><A
HREF="aliases.html#ALIASREF"
>Alias</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="aliases.html#UNALIASREF"
>Removing an
        <I
CLASS="FIRSTTERM"
>alias</I
></A
>, using
	<I
CLASS="FIRSTTERM"
>unalias</I
></P
></LI
></UL
></P
><P
><A
HREF="commandsub.html#AGRAM2"
>Anagramming</A
></P
><P
><A
HREF="list-cons.html#LCONS1"
><I
CLASS="FIRSTTERM"
>And</I
> list</A
>
         <P
></P
><UL
><LI
><P
>         <A
HREF="list-cons.html#ANDDEFAULT"
>To supply default command-line
         argument</A
></P
></LI
></UL
></P
><P
><A
HREF="ops.html#LOGOPS1"
><I
CLASS="FIRSTTERM"
>And</I
> logical
        operator</A
> <B
CLASS="COMMAND"
>&#38;&#38;</B
></P
><P
><A
HREF="x17129.html#ANGLEBRAC"
>Angle brackets</A
>,
         <I
CLASS="FIRSTTERM"
>escaped</I
>,
	 <B
CLASS="COMMAND"
>\&#60; . . . \&#62; </B
>
	 word boundary in a <A
HREF="regexp.html#REGEXREF"
>Regular
	 Expression</A
></P
><P
><A
HREF="here-docs.html#ANONHEREDOC0"
>Anonymous
         <I
CLASS="FIRSTTERM"
>here document</I
></A
>, using
         <B
CLASS="COMMAND"
>:</B
></P
><P
><A
HREF="filearchiv.html#FAARCHIVING1"
>Archiving</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="filearchiv.html#RPMREF"
>rpm</A
></P
></LI
><LI
><P
><A
HREF="filearchiv.html#TARREF"
>tar</A
></P
></LI
></UL
></P
><P
><A
HREF="arithexp.html#ARITHEXPREF"
>Arithmetic expansion</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="testconstructs.html#ARXS"
>         <I
CLASS="FIRSTTERM"
>exit status</I
> of</A
></P
></LI
><LI
><P
><A
HREF="arithexp.html#ARITHEXPVAR1"
>         variations of</A
></P
></LI
></UL
></P
><P
><A
HREF="ops.html#AROPS1"
>Arithmetic operators</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="ops.html#ARITHOPSCOMB"
>         combination operators</A
>, <I
CLASS="FIRSTTERM"
>C</I
>-style</P
><P
><B
CLASS="COMMAND"
> += </B
>
	       <B
CLASS="COMMAND"
> -= </B
>
	       <B
CLASS="COMMAND"
> *= </B
>
               <B
CLASS="COMMAND"
> /= </B
>
	       <B
CLASS="COMMAND"
> %= </B
>
	 </P
><DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="90%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
><A
HREF="bashver3.html#PLUSEQSTR"
>In certain contexts</A
>,
	   <B
CLASS="COMMAND"
>+=</B
> can also function as a <I
CLASS="FIRSTTERM"
>string
	   concatenation</I
> operator.</P
></TD
></TR
></TABLE
></DIV
></LI
></UL
></P
><P
><A
HREF="arrays.html#ARRAYREF"
>Arrays</A
></P
><P
></P
><UL
><LI
><P
><A
HREF="bashver4.html#ASSOCARR"
>Associative arrays</A
>
	      </P
><P
><A
HREF="optimizations.html#ASSOCARRTST"
>more efficient</A
>
	      than conventional arrays</P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYREF"
>Bracket notation</A
>
	      </P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYAPPEND0"
>Concatenating</A
>,
	      <I
CLASS="FIRSTTERM"
>example script</I
></P
></LI
><LI
><P
><A
HREF="arrays.html#COPYARRAY0"
>Copying</A
>
	      </P
></LI
><LI
><P
><A
HREF="declareref.html#ARRAYDECLARE"
>Declaring</A
></P
><P
><TT
CLASS="VARNAME"
>declare -a
		 array_name</TT
></P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYINDIR"
>Embedded
	     arrays</A
></P
></LI
><LI
><P
><A
HREF="arrays.html#EMPTYARRAY0"
>Empty
	     arrays, empty elements</A
>, <I
CLASS="FIRSTTERM"
>example
	     script</I
></P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYINDIR"
>Indirect references</A
>
	      </P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYINIT0"
>Initialization</A
></P
><P
><TT
CLASS="VARNAME"
>array=( element1 element2 ... elementN)</TT
></P
><P
><A
HREF="arrays.html#ARRAYASSIGN0"
><I
CLASS="FIRSTTERM"
>Example
	        script</I
></A
></P
><P
>Using <A
HREF="arrays.html#ARRAYINITCS"
>command
	         substitution</A
></P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYINITCS"
>Loading a
	     file</A
> into an array</P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYMULTIDIM"
>Multidimensional</A
>,
              simulating</P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYNEST"
>Nesting and
	      embedding</A
></P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYNOTATION"
>Notation
	      and usage</A
></P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYNUMELEMENTS"
>Number of elements in</A
></P
><P
><TT
CLASS="VARNAME"
>${#array_name[@]}</TT
></P
><P
><TT
CLASS="VARNAME"
>${#array_name[*]}</TT
></P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYSYNTAX"
>Operations</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#PASSARRAY"
>Passing
             an <I
CLASS="FIRSTTERM"
>array</I
></A
> to a
             function</P
></LI
><LI
><P
>As <A
HREF="assortedtips.html#RETARRAY"
>              <I
CLASS="FIRSTTERM"
>return value</I
> from
	      a function</A
></P
></LI
><LI
><P
>Special properties,
	     <A
HREF="arrays.html#ARRAYSPECIALPROPS"
>example
	     script</A
></P
></LI
><LI
><P
>String operations,
	     <A
HREF="arrays.html#ARRAYSTRINGOPS"
>example
	     script</A
></P
></LI
><LI
><P
><A
HREF="arrays.html#ARRAYUNSET"
><I
CLASS="FIRSTTERM"
>unset</I
> deletes array
	     elements</A
></P
></LI
></UL
><P
><A
HREF="internal.html#READARROW"
>Arrow keys</A
>, detecting</P
><P
>ASCII
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#ASCIIDEF"
>Definition</A
></P
></LI
><LI
><P
><A
HREF="asciitable.html"
>        Scripts for generating ASCII table</A
></P
></LI
></UL
>
      </P
><P
><A
HREF="awk.html"
>awk</A
> field-oriented text
         processing language
         <P
></P
><UL
><LI
><P
><A
HREF="randomvar.html#AWKRANDOMREF"
>         <TT
CLASS="VARNAME"
>rand()</TT
></A
>,
	 random function</P
></LI
><LI
><P
><A
HREF="string-manipulation.html#AWKSTRINGMANIP2"
>String
        manipulation</A
></P
></LI
><LI
><P
><A
HREF="internal.html#EXPORTAWK"
>Using
	<I
CLASS="FIRSTTERM"
>export</I
></A
> to pass a variable to an
	embedded <I
CLASS="FIRSTTERM"
>awk</I
> script</P
></LI
></UL
></P
><P
>* * *</P
><P
>Backlight, <A
HREF="system.html#BACKLIGHT"
>setting the
        brightness</A
></P
><P
><A
HREF="special-chars.html#BACKTICKSREF"
>Backquotes</A
>,
         used in <A
HREF="commandsub.html#BACKQUOTESREF"
>command
         substitution</A
></P
><P
><A
HREF="mathc.html#BASE0"
>Base conversion</A
>,
        <I
CLASS="FIRSTTERM"
>example script</I
></P
><P
><A
HREF="why-shell.html#BASHDEF"
>Bash</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="gotchas.html#BASH3GOTCHA"
>Bad scripting
         practices</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#BASICSREV0"
>Basics reviewed</A
>,
        <I
CLASS="FIRSTTERM"
>script example</I
></P
></LI
><LI
><P
><A
HREF="bash-options.html#CLOPTS"
>Command-line
          options</A
></P
><P
><A
HREF="options.html#OPTIONSTABLE"
><B
CLASS="COMMAND"
>Table</B
></A
></P
></LI
><LI
><P
> <A
HREF="portabilityissues.html#BASHCOMPAT"
>Features that classic
        <I
CLASS="FIRSTTERM"
>Bourne</I
> shell lacks</A
></P
></LI
><LI
><P
><A
HREF="internalvariables.html"
>Internal variables</A
></P
></LI
><LI
><P
><A
HREF="bashver2.html#BASH2REF"
>        Version 2</A
></P
></LI
><LI
><P
><A
HREF="bashver3.html#BASH3REF"
>        Version 3</A
></P
></LI
><LI
><P
><A
HREF="bashver4.html#BASH4REF"
>Version 4</A
></P
><P
><A
HREF="bashver4.html#BASH41"
>Version 4.1</A
></P
><P
><A
HREF="bashver4.html#BASH42"
>Version 4.2</A
></P
></LI
></UL
></P
><P
><A
HREF="sample-bashrc.html"
>.bashrc</A
></P
><P
><A
HREF="internalvariables.html#BASHSUBSHELLREF"
><TT
CLASS="VARNAME"
>$BASH_SUBSHELL</TT
></A
></P
><P
><A
HREF="basic.html#BASICCOMMANDS1"
>Basic commands</A
>, external</P
><P
><A
HREF="dosbatch.html#DOSBATCH1"
>Batch files</A
>,
        <I
CLASS="FIRSTTERM"
>DOS</I
></P
><P
><A
HREF="timedate.html#BATCHPROCREF"
>Batch processing</A
></P
><P
><A
HREF="mathc.html#BCREF"
>bc</A
>, calculator utility
         <P
></P
><UL
><LI
><P
><A
HREF="mathc.html#BCHEREDOC"
>In a <I
CLASS="FIRSTTERM"
>here
        document</I
></A
></P
></LI
><LI
><P
><A
HREF="mathc.html#BCTEMPLATE"
>Template</A
>
        for calculating a script variable</P
></LI
></UL
></P
><P
><A
HREF="biblio.html"
>Bibliography</A
></P
><P
><A
HREF="textproc.html#BISONREF"
>Bison</A
> utility</P
><P
><A
HREF="ops.html#BITWSOPS1"
>Bitwise operators</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="contributed-scripts.html#BASE64"
>Example script</A
>
        </P
></LI
></UL
>
      </P
><P
><A
HREF="devref1.html#BLOCKDEVREF"
>Block devices</A
>
        <P
></P
><UL
><LI
><P
><A
HREF="fto.html#BLOCKDEVTEST"
>testing
	    for</A
></P
></LI
></UL
> 
       </P
><P
><A
HREF="special-chars.html#CODEBLOCKREF"
>Blocks of code</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="loops1.html#NODODONE"
>Iterating / looping</A
></P
></LI
><LI
><P
><A
HREF="special-chars.html#BLOCKIO"
>Redirection</A
></P
><P
><I
CLASS="FIRSTTERM"
>Script example</I
>:
        <A
HREF="special-chars.html#BLOCKIO2"
>Redirecting output of a a code
        block</A
></P
></LI
></UL
></P
><P
><A
HREF="extmisc.html#BFS"
>Bootable flash drives</A
>, creating</P
><P
><A
HREF="special-chars.html#BRACEEXPREF"
>Brace expansion</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#BRACEEXPREF33"
>Extended</A
>,
	   <TT
CLASS="REPLACEABLE"
><I
>{a..z}</I
></TT
></P
></LI
><LI
><P
><A
HREF="bashver3.html#BRACEEXPREF3"
>Parameterizing</A
>
	 </P
></LI
><LI
><P
>With <A
HREF="bashver4.html#BRACEEXPREF4"
>increment and
      zero-padding</A
> (new feature in Bash, <A
HREF="bashver4.html#BASH4REF"
>version
      4</A
>)</P
></LI
></UL
></P
><P
>Brackets, <B
CLASS="COMMAND"
>[ ]</B
>
         <P
></P
><UL
><LI
><P
><A
HREF="arrays.html#BRACKARRAY"
><I
CLASS="FIRSTTERM"
>Array</I
>
        element</A
></P
></LI
><LI
><P
><A
HREF="x17129.html#BRACKETSREF"
>Enclose character set
        to match</A
> in a <I
CLASS="FIRSTTERM"
>Regular
	Expression</I
></P
></LI
><LI
><P
><A
HREF="special-chars.html#BRACKTEST"
><I
CLASS="FIRSTTERM"
>Test</I
> construct</A
></P
></LI
></UL
></P
><P
>Brackets, <I
CLASS="FIRSTTERM"
>curly</I
>, <B
CLASS="COMMAND"
>{}</B
>,
        used in</P
><P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#CODEBLOCKREF"
>Code
        block</A
></P
></LI
><LI
><P
><A
HREF="moreadv.html#CURLYBRACKETSREF"
>         <I
CLASS="FIRSTTERM"
>find</I
></A
></P
></LI
><LI
><P
><A
HREF="x17129.html#ESCPCB"
><I
CLASS="FIRSTTERM"
>Extended Regular
	 Expressions</I
></A
></P
></LI
><LI
><P
><A
HREF="othertypesv.html#BRACKETNOTATION"
><I
CLASS="FIRSTTERM"
>Positional
        parameters</I
></A
></P
></LI
><LI
><P
><A
HREF="moreadv.html#XARGSCURLYREF"
><I
CLASS="FIRSTTERM"
>xargs</I
></A
></P
></LI
></UL
><P
><A
HREF="loopcontrol.html#BRKCONT1"
>break</A
>
         <I
CLASS="FIRSTTERM"
>loop</I
> control command
	    <P
></P
><UL
><LI
><P
><A
HREF="loopcontrol.html#BREAKPARAM"
>Parameter</A
>
         (optional)</P
></LI
></UL
></P
><P
><A
HREF="internal.html#BUILTINREF"
>Builtins</A
> in
         <I
CLASS="FIRSTTERM"
>Bash</I
>
	    <P
></P
><UL
><LI
><P
><A
HREF="internal.html#BLTINFRK"
>Do not fork a subprocess</A
>
         </P
></LI
></UL
></P
><P
>* * *</P
><P
><A
HREF="testbranch.html#CASEESAC1"
><I
CLASS="FIRSTTERM"
>case</I
>
         construct</A
>
	    <P
></P
><UL
><LI
><P
><A
HREF="testbranch.html#CASECL"
>Command-line parameters</A
>,
         handling</P
></LI
><LI
><P
><A
HREF="testbranch.html#CSGLOB"
>Globbing</A
>,
         filtering strings with</P
></LI
></UL
></P
><P
><A
HREF="basic.html#CATREF"
>cat</A
>,
        con<I
CLASS="FIRSTTERM"
>cat</I
>entate file(s)
	    <P
></P
><UL
><LI
><P
><A
HREF="optimizations.html#CATABUSE"
>Abuse of</A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#CATSCRIPTREF"
><I
CLASS="FIRSTTERM"
>cat</I
>
         scripts</A
></P
></LI
><LI
><P
><A
HREF="basic.html#CATLESSEFF"
>Less efficient than
        redirecting <TT
CLASS="FILENAME"
>stdin</TT
></A
></P
></LI
><LI
><P
><A
HREF="internal.html#READPIPEREF"
>Piping the output
        of</A
>, to a <A
HREF="internal.html#READREF"
>read</A
></P
></LI
><LI
><P
><A
HREF="basic.html#CATUSES"
>Uses of</A
></P
></LI
></UL
></P
><P
><A
HREF="devref1.html#CHARDEVREF"
>Character devices</A
>
        <P
></P
><UL
><LI
><P
><A
HREF="fto.html#CHARDEVTEST"
>testing
	  for</A
></P
></LI
></UL
>
      </P
><P
><A
HREF="filearchiv.html#CHECKSUMREF"
>Checksum</A
></P
><P
><A
HREF="othertypesv.html#CHILDREF"
>Child processes</A
></P
><P
><A
HREF="special-chars.html#NULLREF"
>Colon</A
>, <B
CLASS="COMMAND"
>: </B
>,
         equivalent to the <A
HREF="internal.html#TRUEREF"
>true</A
> Bash
         builtin</P
><P
><A
HREF="colorizing.html#COLORIZINGREF"
>Colorizing scripts</A
>
	    <P
></P
><UL
><LI
><P
>Cycling through the background colors, <A
HREF="contributed-scripts.html#SHOWALLC"
>example script</A
></P
></LI
><LI
><P
><A
HREF="colorizing.html#COLORIZTABLE"
><B
CLASS="COMMAND"
>Table</B
></A
> of
	   color escape sequences</P
></LI
><LI
><P
><A
HREF="colorizing.html#COLORIZTEMPL"
>Template</A
>,
	   colored text on colored background</P
></LI
></UL
></P
><P
><A
HREF="ops.html#COMMAOP"
>Comma operator</A
>,
         linking commands or operations</P
><P
><A
HREF="bash-options.html"
>Command-line options</A
></P
><P
><A
HREF="bashver4.html#CNFH"
>command_not_found_handle ()</A
>
        <I
CLASS="FIRSTTERM"
>builtin</I
> error-handling function
	(<A
HREF="bashver4.html#BASH4REF"
>version 4+</A
> of Bash)</P
><P
><A
HREF="commandsub.html#COMMANDSUBREF"
>Command substitution</A
>
         <P
></P
><UL
><LI
><P
>         <A
HREF="commandsub.html#CSPARENS"
><B
CLASS="COMMAND"
>$( ... )</B
></A
>,
	   preferred notation</P
></LI
><LI
><P
><A
HREF="commandsub.html#BACKQUOTESREF"
><I
CLASS="FIRSTTERM"
>Backquotes</I
></A
></P
></LI
><LI
><P
><A
HREF="commandsub.html#CSTOOLSET"
>Extending the
         <I
CLASS="FIRSTTERM"
>Bash</I
> toolset</A
></P
></LI
><LI
><P
><A
HREF="commandsub.html#CSSUBSH"
>Invokes a
         <I
CLASS="FIRSTTERM"
>subshell</I
></A
></P
></LI
><LI
><P
><A
HREF="commandsub.html#CSNEST"
>Nesting</A
></P
></LI
><LI
><P
><A
HREF="commandsub.html#CSTRNL"
>Removes trailing newlines</A
>
         </P
></LI
><LI
><P
><A
HREF="commandsub.html#CSVL"
>Setting variable from loop output</A
>
         </P
></LI
><LI
><P
><A
HREF="commandsub.html#CSWS"
>Word
         splitting</A
></P
></LI
></UL
></P
><P
><A
HREF="assortedtips.html#COMMENTH"
>Comment headers</A
>,
        special purpose</P
><P
>Commenting out blocks of code
        <P
></P
><UL
><LI
><P
>Using an <A
HREF="here-docs.html#CBLOCK1"
><I
CLASS="FIRSTTERM"
>anonymous</I
> here
        document</A
></P
></LI
><LI
><P
>Using an <A
HREF="assortedtips.html#COMOUTBL"
>        <I
CLASS="FIRSTTERM"
>if-then</I
> construct</A
></P
></LI
></UL
></P
><P
><A
HREF="communications.html"
>Communications and
        hosts</A
></P
><P
><A
HREF="comparison-ops.html#CCOMPARISON1"
>Compound comparison</A
>
         operators</P
><P
><A
HREF="filearchiv.html#FACOMPRESSION1"
>Compression utilities</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="filearchiv.html#BZIPREF"
>bzip2</A
></P
></LI
><LI
><P
><A
HREF="filearchiv.html#COMPRESSREF"
>compress</A
></P
></LI
><LI
><P
><A
HREF="filearchiv.html#GZIPREF"
>gzip</A
></P
></LI
><LI
><P
><A
HREF="filearchiv.html#ZIPREF"
>zip</A
></P
></LI
></UL
></P
><P
><A
HREF="loopcontrol.html#BRKCONT1"
>continue</A
> loop control command</P
><P
><A
HREF="special-chars.html#CONTROLCHARREF"
>Control characters</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#CTLCREF"
>Control-C</A
>,
         <I
CLASS="FIRSTTERM"
>break</I
></P
></LI
><LI
><P
><A
HREF="special-chars.html#CTLDREF"
>Control-D</A
>,
         terminate / log out / erase</P
></LI
><LI
><P
><A
HREF="special-chars.html#CTLGREF"
>Control-G</A
>,
         <TT
CLASS="USERINPUT"
><B
>BEL</B
></TT
>
         (<I
CLASS="FIRSTTERM"
>beep</I
>)</P
></LI
><LI
><P
><A
HREF="special-chars.html#CTLHREF"
>Control-H</A
>,
         <I
CLASS="FIRSTTERM"
>rubout</I
></P
></LI
><LI
><P
><A
HREF="special-chars.html#CTLJREF"
>Control-J</A
>,
         <I
CLASS="FIRSTTERM"
>newline</I
></P
></LI
><LI
><P
><A
HREF="special-chars.html#CTLMREF"
>Control-M</A
>,
         carriage return</P
></LI
></UL
></P
><P
><A
HREF="bashver4.html#COPROCREF"
>Coprocesses</A
></P
><P
><A
HREF="system.html#CRONREF"
>cron</A
>, scheduling
        <I
CLASS="FIRSTTERM"
>daemon</I
></P
><P
><A
HREF="assortedtips.html#CSTYLE"
><I
CLASS="FIRSTTERM"
>C</I
>-style syntax
        </A
>, for handling variables</P
><P
><A
HREF="textproc.html#CWSOLVER"
>Crossword puzzle solver</A
></P
><P
><A
HREF="contributed-scripts.html#GRONSFELD"
>Cryptography</A
></P
><P
>Curly brackets {}
           <P
></P
><UL
><LI
><P
><A
HREF="moreadv.html#CURLYBRACKETSREF"
>in
         <I
CLASS="FIRSTTERM"
>find</I
> command</A
></P
></LI
><LI
><P
><A
HREF="x17129.html#ESCPCB"
>in an
         <I
CLASS="FIRSTTERM"
>Extended Regular
	 Expression</I
></A
></P
></LI
><LI
><P
><A
HREF="moreadv.html#XARGSCURLYREF"
>in
         <I
CLASS="FIRSTTERM"
>xargs</I
></A
></P
></LI
></UL
></P
><P
>* * *</P
><P
><A
HREF="communications.html#DAEMONREF"
>Daemons</A
>, in UNIX-type OS</P
><P
><A
HREF="timedate.html#DATEREF"
>date</A
></P
><P
><A
HREF="mathc.html#DCREF"
>dc</A
>, calculator utility</P
><P
><A
HREF="extmisc.html#DDREF"
>dd</A
>, <I
CLASS="FIRSTTERM"
>data
        duplicator</I
> command
	  <P
></P
><UL
><LI
><P
><A
HREF="extmisc.html#DDCONVERSIONS"
>Conversions</A
></P
></LI
><LI
><P
><A
HREF="extmisc.html#DDCOPY"
>Copying raw data</A
>
        to/from devices</P
></LI
><LI
><P
><A
HREF="extmisc.html#DDFDEL"
>File deletion</A
>,
        <I
CLASS="FIRSTTERM"
>secure</I
></P
></LI
><LI
><P
><A
HREF="extmisc.html#DDKEYSTROKES"
>Keystrokes</A
>, capturing</P
></LI
><LI
><P
><A
HREF="extmisc.html#DDOPTIONS"
>Options</A
></P
></LI
><LI
><P
><A
HREF="extmisc.html#DDRANDOM"
>Random access</A
> on a data
        stream</P
></LI
><LI
><P
><EM
>Raspberry Pi</EM
>,
      <A
HREF="extmisc.html#RPSDCARD01"
>script for preparing a bootable SD
      card</A
>
	</P
></LI
><LI
><P
><A
HREF="extmisc.html#DDSWAP"
>Swapfiles</A
>, initializing</P
></LI
><LI
><P
><A
HREF="biblio.html#DDLINK"
>Thread on
        <I
CLASS="FIRSTTERM"
>www.linuxquestions.org</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="debugging.html"
>Debugging scripts</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="debugging.html#DEBUGTOOLS"
>Tools</A
></P
></LI
><LI
><P
><A
HREF="debugging.html#DEBUGTRAP"
><I
CLASS="FIRSTTERM"
>Trapping</I
> at
        exit</A
></P
></LI
><LI
><P
><A
HREF="debugging.html#TRAPREF1"
><I
CLASS="FIRSTTERM"
>Trapping</I
>
          signals</A
></P
></LI
></UL
></P
><P
><A
HREF="numerical-constants.html#NUMCONSTANTS"
>Decimal number</A
>,
         Bash interprets numbers as</P
><P
><A
HREF="declareref.html#DECLARE1REF"
>declare</A
> builtin</P
><P
></P
><UL
><LI
><P
><A
HREF="declareref.html#DECLAREOPSREF1"
>options</A
></P
><P
><A
HREF="bashver4.html#DECLARECASEMOD"
>case-modification</A
>
        options (<A
HREF="bashver4.html#BASH4REF"
>version 4+</A
> of Bash)
	</P
></LI
></UL
><P
><A
HREF="parameter-substitution.html#DEFPARAM"
>Default parameters</A
></P
><P
><A
HREF="devproc.html#DEVPROCREF"
><TT
CLASS="FILENAME"
>/dev</TT
></A
> directory

         <P
></P
><UL
><LI
><P
><A
HREF="zeros.html#DEVNULLREF"
><TT
CLASS="FILENAME"
>/dev/null</TT
></A
>
           pseudo-device file</P
></LI
><LI
><P
><A
HREF="randomvar.html#URANDOMREF"
><TT
CLASS="FILENAME"
>/dev/urandom</TT
></A
>
         pseudo-device file, generating pseudorandom numbers
         with</P
></LI
><LI
><P
><A
HREF="zeros.html#ZEROSREF1"
><TT
CLASS="FILENAME"
>/dev/zero</TT
></A
>,
         pseudo-device file</P
></LI
></UL
></P
><P
><A
HREF="devref1.html#DEVFILEREF"
>Device file</A
></P
><P
><A
HREF="assortedtips.html#DIALOGREF"
><I
CLASS="FIRSTTERM"
>dialog</I
></A
>,
         utility for generating <I
CLASS="FIRSTTERM"
>dialog</I
> boxes in
         a script</P
><P
><A
HREF="internalvariables.html#DIRSTACKREF"
><TT
CLASS="VARNAME"
>$DIRSTACK</TT
></A
>
         <I
CLASS="FIRSTTERM"
>directory stack</I
></P
><P
><A
HREF="restricted-sh.html#DISABLEDCOMMREF"
>Disabled commands</A
>,
         in <I
CLASS="FIRSTTERM"
>restricted shells</I
></P
><P
><A
HREF="loops1.html#DOINREF"
>do</A
> keyword,
         begins execution of commands within a <A
HREF="loops.html#LOOPREF00"
>loop</A
></P
><P
><A
HREF="loops1.html#DOINREF"
>done</A
> keyword,
         terminates a loop</P
><P
><A
HREF="dosbatch.html#DOSBATCH1"
><I
CLASS="FIRSTTERM"
>DOS</I
> batch
         files</A
>, converting to shell scripts</P
><P
><A
HREF="dosbatch.html#DOSUNIXEQUIV"
><I
CLASS="FIRSTTERM"
>DOS</I
>
        commands</A
>, UNIX equivalents of
        (<B
CLASS="COMMAND"
>table</B
>)</P
><P
><A
HREF="basic.html#DOTFILESREF"
><I
CLASS="FIRSTTERM"
>dot files</I
></A
>,
         <SPAN
CLASS="QUOTE"
>"hidden"</SPAN
> setup and configuration files</P
><P
><A
HREF="testconstructs.html#DBLBRACKETS"
>Double brackets</A
>
         <B
CLASS="COMMAND"
>[[ ... ]]</B
> <A
HREF="tests.html#IFTHEN"
>test</A
>
         construct</P
><P
></P
><UL
><LI
><P
>and <A
HREF="testconstructs.html#DBLBRAEV"
>evaluation of
        <I
CLASS="FIRSTTERM"
>octal/hex</I
> constants</A
></P
></LI
></UL
><P
><A
HREF="dblparens.html#DBLPARENSREF"
>Double parentheses</A
>
      <B
CLASS="COMMAND"
>(( ... )) </B
> arithmetic expansion/evaluation
      construct</P
><P
><A
HREF="varsubn.html#DBLQUO"
>Double quotes</A
>
      <B
CLASS="COMMAND"
>" ... "</B
> <I
CLASS="FIRSTTERM"
>weak</I
> quoting
	   <P
></P
><UL
><LI
><P
><A
HREF="quotingvar.html#QUOTINGBSL"
><I
CLASS="FIRSTTERM"
>Double-quoting</I
>
	       the <I
CLASS="FIRSTTERM"
>backslash</I
> (<B
CLASS="COMMAND"
>\</B
>)
	       character</A
></P
></LI
></UL
>
      </P
><P
><A
HREF="x23170.html#DOUBLESPACE"
>Double-spacing a text
        file</A
>, using <A
HREF="sedawk.html#SEDREF"
>sed</A
></P
><P
>* * *</P
><P
><B
CLASS="COMMAND"
>-e </B
>
        <A
HREF="fto.html#RTIF"
>File exists</A
> test</P
><P
><A
HREF="internal.html#ECHOREF"
>echo</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="internal.html#ECHOGREPREF"
>Feeding commands down
        a <I
CLASS="FIRSTTERM"
>pipe</I
></A
></P
></LI
><LI
><P
><A
HREF="internal.html#ECHOCS"
>Setting a variable</A
>
        using <A
HREF="commandsub.html#COMMANDSUBREF"
>command
        substitution</A
></P
></LI
><LI
><P
><A
HREF="internal.html#BINECHO"
><TT
CLASS="FILENAME"
>/bin/echo</TT
></A
>,
	external <I
CLASS="FIRSTTERM"
>echo</I
> command</P
></LI
></UL
></P
><P
><A
HREF="testconstructs.html#ELIFREF1"
>elif</A
>,
        Contraction of <I
CLASS="FIRSTTERM"
>else</I
>
        and <A
HREF="tests.html#IFTHEN"
>if</A
></P
><P
><A
HREF="testconstructs.html#ELSEREF"
>else</A
></P
><P
>Encrypting files, using <A
HREF="filearchiv.html#OPENSSLREF"
>openssl</A
></P
><P
><A
HREF="testbranch.html#CASEESAC1"
>esac</A
>, keyword terminating
        <I
CLASS="FIRSTTERM"
>case</I
> construct</P
><P
><A
HREF="othertypesv.html#ENVREF"
><I
CLASS="FIRSTTERM"
>Environmental</I
>
         variables</A
></P
><P
><A
HREF="comparison-ops.html#EQUALREF"
> -eq </A
>,
         <I
CLASS="FIRSTTERM"
>is-equal-to</I
> <A
HREF="comparison-ops.html#ICOMPARISON1"
>integer
	 comparison</A
> test</P
><P
><A
HREF="arrays.html#PRIMES0"
>Eratosthenes,
         Sieve of</A
>, algorithm for generating prime numbers</P
><P
><A
HREF="escapingsection.html#SPM"
>Escaped characters</A
>,
         special meanings of
	 <P
></P
><UL
><LI
><P
>Within <A
HREF="escapingsection.html#STRQ"
>$' ... '</A
>
	   string expansion</P
></LI
><LI
><P
><A
HREF="bashver4.html#UNICODEREF2"
>Used with
	   <I
CLASS="FIRSTTERM"
>Unicode</I
> characters</A
></P
></LI
></UL
>
	   </P
><P
><A
HREF="system.html#FSTABREF"
><TT
CLASS="FILENAME"
>/etc/fstab</TT
></A
>
        (filesystem mount) file</P
><P
><A
HREF="files.html#DATAFILESREF1"
><TT
CLASS="FILENAME"
>/etc/passwd</TT
></A
>
        (user account) file</P
><P
><A
HREF="internalvariables.html#EUIDREF"
><TT
CLASS="VARNAME"
>$EUID</TT
></A
>,
         <I
CLASS="FIRSTTERM"
>Effective user ID</I
></P
><P
><A
HREF="internal.html#EVALREF"
>eval</A
>,
         Combine and <I
CLASS="FIRSTTERM"
>evaluate</I
> expression(s),
	 with variable expansion
	 <P
></P
><UL
><LI
><P
><A
HREF="internal.html#EVALEFF"
>Effects
        of</A
>, <I
CLASS="FIRSTTERM"
>Example script</I
></P
></LI
><LI
><P
><A
HREF="internal.html#EVALFORCED"
>Forces
        <I
CLASS="FIRSTTERM"
>reevaluation</I
></A
> of
	arguments</P
></LI
><LI
><P
>And <A
HREF="ivr.html#EVALINDREF"
>indirect
      references</A
></P
></LI
><LI
><P
><A
HREF="internal.html#EVALRISK"
>Risk of
        using</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#SAMORSE"
>Using
        <I
CLASS="FIRSTTERM"
>eval</I
> to convert <I
CLASS="FIRSTTERM"
>array</I
>
	elements into a command list</A
></P
></LI
><LI
><P
><A
HREF="internal.html#ARRCHOICE0"
>Using
        <I
CLASS="FIRSTTERM"
>eval</I
> to select among
        variables</A
></P
></LI
></UL
></P
><P
><A
HREF="testconstructs.html#DBLBRAEV"
>Evaluation of
        <I
CLASS="FIRSTTERM"
>octal/hex</I
> constants within
	[[ ... ]]</A
></P
><P
><A
HREF="x17974.html#USINGEXECREF"
>exec</A
> command,
         using in <A
HREF="io-redirection.html#IOREDIRREF"
>redirection</A
></P
><P
><A
HREF="exercises.html"
>Exercises</A
></P
><P
>Exit and Exit status
        <P
></P
><UL
><LI
><P
><A
HREF="exit-status.html#EXITCOMMANDREF"
>exit</A
>
         command</P
></LI
><LI
><P
><A
HREF="exit-status.html#EXITSTATUSREF"
>Exit status</A
>
	  (<I
CLASS="FIRSTTERM"
>exit code</I
>, <I
CLASS="FIRSTTERM"
>return</I
>
	  status of a command)</P
><P
><A
HREF="exitcodes.html#EXITCODESREF"
><B
CLASS="COMMAND"
>Table</B
></A
>,
	  <I
CLASS="FIRSTTERM"
>Exit
          codes</I
> with special meanings</P
><P
>          <A
HREF="gotchas.html#GOTCHAEXITVALANAMALIES"
>Anomalous</A
>
        </P
><P
><A
HREF="exitcodes.html#EXCOOR"
>Out of range</A
></P
><P
><A
HREF="exit-status.html#PIPEEX"
><I
CLASS="FIRSTTERM"
>Pipe</I
></A
>
	   exit status</P
><P
><A
HREF="complexfunct.html#EXITRETURN1"
>           Specified by a <I
CLASS="FIRSTTERM"
>function
           return</I
></A
></P
><P
><A
HREF="exit-status.html#EXITSUCCESS"
><I
CLASS="FIRSTTERM"
>Successful</I
></A
>,
	   <B
CLASS="COMMAND"
>0</B
></P
><P
><A
HREF="exitcodes.html#SYSEXITSREF"
><TT
CLASS="FILENAME"
>/usr/include/sysexits.h</TT
></A
>,
	   system file listing C/C++ standard exit codes</P
></LI
></UL
></P
><P
><A
HREF="internal.html#EXPORTREF2"
>Export</A
>,
         to make available variables to <A
HREF="othertypesv.html#CHILDREF"
>child processes</A
>
	 <P
></P
><UL
><LI
><P
><A
HREF="internal.html#EXPORTAWK"
>Passing a variable
        to an embedded <I
CLASS="FIRSTTERM"
>awk</I
>
	script</A
></P
></LI
></UL
></P
><P
><A
HREF="moreadv.html#EXPRREF"
>expr</A
>,
         <I
CLASS="FIRSTTERM"
>Expression</I
> evaluator
	   <P
></P
><UL
><LI
><P
><A
HREF="moreadv.html#EXPEXTRSUB"
>Substring
         extraction</A
></P
></LI
><LI
><P
><A
HREF="string-manipulation.html#SUBSTRINGINDEX2"
>Substring
         <I
CLASS="FIRSTTERM"
>index</I
> (numerical position in
         string)</A
></P
></LI
><LI
><P
><A
HREF="string-manipulation.html#EXPRMATCH"
>Substring
         matching</A
></P
></LI
></UL
></P
><P
><A
HREF="x17129.html#EXTREGEX"
>Extended <I
CLASS="FIRSTTERM"
>Regular
         Expressions</I
></A
>
	  <P
></P
><UL
><LI
><P
><B
CLASS="COMMAND"
>? </B
> (question mark)
          <A
HREF="x17129.html#QUEXREGEX"
>Match zero / one characters</A
>
	  </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>( ... ) </B
>
          <A
HREF="x17129.html#PARENGRPS"
>Group
	  of expressions</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>\{ N \}</B
>
         <A
HREF="x17129.html#ESCPCB"
><SPAN
CLASS="QUOTE"
>"Curly"</SPAN
> brackets</A
>,
         <I
CLASS="FIRSTTERM"
>escaped</I
>,
	 number of character sets to match</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>+ </B
>
          <A
HREF="x17129.html#PLUSREF"
><I
CLASS="FIRSTTERM"
>Character
          match</I
></A
></P
></LI
></UL
></P
><P
>* * *</P
><P
><A
HREF="mathc.html#FACTORREF"
>factor</A
>, decomposes an
        integer into its prime factors
	  <P
></P
><UL
><LI
><P
>Application: <A
HREF="mathc.html#PRIMES2"
>Generating
            prime numbers</A
></P
></LI
></UL
></P
><P
><A
HREF="internal.html#FALSEREF"
>false</A
>,
        returns <I
CLASS="FIRSTTERM"
>unsuccessful</I
> (1) <A
HREF="exit-status.html#EXITSTATUSREF"
>exit status</A
></P
><P
><A
HREF="special-chars.html#FIELDREF"
>Field</A
>, a group of characters
        that comprises an item of data</P
><P
><A
HREF="filearchiv.html"
>Files / Archiving</A
></P
><P
><A
HREF="io-redirection.html#FDREF"
>File descriptors</A
></P
><P
></P
><UL
><LI
><P
><A
HREF="io-redirection.html#CFD"
>Closing</A
></P
><P
><B
CLASS="COMMAND"
>n&#60;&#38;-</B
>
           Close input file descriptor <I
CLASS="FIRSTTERM"
>n</I
></P
><P
><B
CLASS="COMMAND"
>0&#60;&#38;-</B
>,
	   <B
CLASS="COMMAND"
>&#60;&#38;-</B
>
           Close <TT
CLASS="FILENAME"
>stdin</TT
></P
><P
><B
CLASS="COMMAND"
>n&#62;&#38;-</B
>
          Close output file descriptor <I
CLASS="FIRSTTERM"
>n</I
></P
><P
><B
CLASS="COMMAND"
>1&#62;&#38;-</B
>,
	   <B
CLASS="COMMAND"
>&#62;&#38;-</B
>
	   Close <TT
CLASS="FILENAME"
>stdout</TT
></P
></LI
><LI
><P
><A
HREF="io-redirection.html#FDREF1"
>File handles in
        <I
CLASS="FIRSTTERM"
>C</I
></A
>, similarity to</P
></LI
></UL
><P
><A
HREF="filearchiv.html#OPENSSLREF"
>File encryption</A
></P
><P
><A
HREF="moreadv.html#FINDREF"
>find</A
>
         <P
></P
><UL
><LI
><P
><B
CLASS="COMMAND"
>{} </B
>
        <A
HREF="moreadv.html#CURLYBRACKETSREF"
>Curly
        brackets</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>\; </B
>
        <A
HREF="moreadv.html#FINDREF0"
><I
CLASS="FIRSTTERM"
>Escaped</I
>
        semicolon</A
></P
></LI
></UL
></P
><P
><A
HREF="special-chars.html#FILTERDEF"
>Filter</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#FILTERDASH"
>Using <SPAN
CLASS="TOKEN"
>-</SPAN
>
        with file-processing utility as a filter</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#FILTEROUTP"
>         Feeding output of a filter back to <EM
>same</EM
>
	 filter</A
></P
></LI
></UL
></P
><P
><A
HREF="ops.html#NOFLOATINGPOINT"
>Floating point numbers</A
>,
         Bash does not recognize</P
><P
><A
HREF="textproc.html#FOLDREF"
>fold</A
>, a filter to wrap lines of
        text</P
><P
><A
HREF="internal.html#FORKREF"
>Forking</A
> a <I
CLASS="FIRSTTERM"
>child</I
>
         process</P
><P
><A
HREF="loops1.html#FORLOOPREF1"
><I
CLASS="FIRSTTERM"
>for</I
>
         loops</A
></P
><P
><A
HREF="functions.html#FUNCTIONREF"
>Functions</A
></P
><P
></P
><UL
><LI
><P
><A
HREF="complexfunct.html#PASSEDARGS"
>Arguments
         passed</A
> referred to by position</P
></LI
><LI
><P
><A
HREF="complexfunct.html#CAPTURERETVAL"
>Capturing
        the return value</A
> of a function
	using <A
HREF="internal.html#ECHOREF"
>echo</A
></P
></LI
><LI
><P
><A
HREF="special-chars.html#COLONFNAME"
><I
CLASS="FIRSTTERM"
>Colon</I
></A
>
	as function name</P
></LI
><LI
><P
><A
HREF="functions.html#FUNCTDEFMUST"
>Definition
         must precede</A
> first call to function</P
></LI
><LI
><P
><A
HREF="complexfunct.html#EXITRETURN1"
>Exit
         status</A
></P
></LI
><LI
><P
><A
HREF="localvar.html#LOCALREF1"
>Local variables</A
></P
><P
>and <A
HREF="localvar.html#LOCVARRECUR"
>recursion</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#PASSARRAY"
>Passing
        an <I
CLASS="FIRSTTERM"
>array</I
></A
> to a
        function</P
></LI
><LI
><P
><A
HREF="complexfunct.html#FUNCPOINTERS"
>Passing pointers</A
>
	 to a function</P
></LI
><LI
><P
><A
HREF="complexfunct.html#PASSEDARGS"
>Positional
         parameters</A
></P
></LI
><LI
><P
><A
HREF="localvar.html#RECURSIONREF0"
>Recursion</A
></P
></LI
><LI
><P
><A
HREF="complexfunct.html#REDSTDINFUNC1"
>Redirecting
	 <TT
CLASS="FILENAME"
>stdin</TT
></A
>
	 of a function</P
></LI
><LI
><P
><A
HREF="complexfunct.html#RETURNREF"
>return</A
></P
><P
>Multiple <I
CLASS="FIRSTTERM"
>return values</I
> from
         a function,
	   <A
HREF="contributed-scripts.html#STDDEV"
>example script</A
></P
><P
><A
HREF="assortedtips.html#RETARRAY"
>           Returning an <I
CLASS="FIRSTTERM"
>array</I
></A
> from
	   a function</P
><P
><A
HREF="assortedtips.html#RVT"
><I
CLASS="FIRSTTERM"
>Return</I
>
           range limits</A
>, workarounds</P
></LI
><LI
><P
><A
HREF="complexfunct.html#FSHIFTREF"
><I
CLASS="FIRSTTERM"
>Shift</I
>
	 arguments passed</A
> to a function</P
></LI
><LI
><P
><A
HREF="functions.html#FSTRANGEREF"
>Unusual function
         names</A
></P
></LI
></UL
><P
>* * *</P
><P
>Games and amusements
        <P
></P
><UL
><LI
><P
><A
HREF="assortedtips.html#AGRAM"
>Anagrams</A
></P
></LI
><LI
><P
><A
HREF="commandsub.html#AGRAM2"
>Anagrams</A
>, again</P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#BINGO"
>Bingo Number Generator</A
></P
></LI
><LI
><P
><A
HREF="textproc.html#CWSOLVER"
>Crossword puzzle
	    solver</A
></P
></LI
><LI
><P
><A
HREF="textproc.html#CRYPTOQUOTE"
>Crypto-Quotes</A
></P
></LI
><LI
><P
><A
HREF="bashver2.html#CARDS"
>Dealing a deck of cards</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#FIFTEEN"
>Fifteen Puzzle</A
></P
></LI
><LI
><P
><A
HREF="colorizing.html#HORSERACE"
>Horse race</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#KTOUR"
>Knight's Tour</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#LIFESLOW"
><SPAN
CLASS="QUOTE"
>"Life"</SPAN
>
	    game</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#MSQUARE"
>Magic Squares</A
></P
></LI
><LI
><P
><A
HREF="devref1.html#MUSICSCR"
>Music-playing
	    script</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#NIM"
>Nim</A
></P
></LI
><LI
><P
><A
HREF="randomvar.html#BROWNIAN"
>Pachinko</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#QKY"
>Perquackey</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#PETALS"
>Petals Around the Rose</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#BASHPODDER"
>Podcasting</A
></P
></LI
><LI
><P
><A
HREF="arrays.html#POEM"
>Poem</A
></P
></LI
><LI
><P
><A
HREF="wrapper.html#SPEECH00"
>Speech
	    generation</A
></P
></LI
><LI
><P
><A
HREF="recurnolocvar.html#HANOI"
>Towers of Hanoi</A
></P
><P
><A
HREF="contributed-scripts.html#HANOI2"
>Graphic
	    version</A
></P
><P
><A
HREF="contributed-scripts.html#HANOI2A"
>Alternate graphic
	    version</A
></P
></LI
></UL
></P
><P
><A
HREF="extmisc.html#GETOPTY"
>getopt</A
>,
        <I
CLASS="FIRSTTERM"
>external</I
> command for parsing script
        <I
CLASS="FIRSTTERM"
>command-line</I
> arguments
	   <P
></P
><UL
><LI
><P
><A
HREF="string-manipulation.html#GETOPTSIMPLE1"
>Emulated
         in a script</A
></P
></LI
></UL
></P
><P
><A
HREF="internal.html#GETOPTSX"
>getopts</A
>,
        Bash <I
CLASS="FIRSTTERM"
>builtin</I
> for parsing script
        <I
CLASS="FIRSTTERM"
>command-line</I
> arguments
	   <P
></P
><UL
><LI
><P
><A
HREF="internal.html#GETOPTSOPT"
><TT
CLASS="VARNAME"
>$OPTIND</TT
> /
         <TT
CLASS="VARNAME"
>$OPTARG</TT
></A
></P
></LI
></UL
></P
><P
><A
HREF="subshells.html#SCOPEREF"
>Global</A
>
        variable</P
><P
><A
HREF="globbingref.html#GLOBBINGREF2"
>Globbing</A
>,
         filename expansion
	   <P
></P
><UL
><LI
><P
><A
HREF="globbingref.html#HANDLINGFNAMES"
>Handling
	 filenames correctly</A
></P
></LI
><LI
><P
><A
HREF="special-chars.html#ASTERISKREF"
><I
CLASS="FIRSTTERM"
>Wild
         cards</I
></A
></P
></LI
><LI
><P
><A
HREF="globbingref.html#WDOTFILEWC"
>Will not match
          <TT
CLASS="FILENAME"
>dot files</TT
></A
></P
></LI
></UL
></P
><P
><A
HREF="mathc.html#GOLDENRATIO"
>Golden Ratio</A
>
        (<I
CLASS="FIRSTTERM"
>Phi</I
>)</P
><P
><A
HREF="comparison-ops.html#GE0REF"
> -ge </A
>,
         <I
CLASS="FIRSTTERM"
>greater-than or equal</I
>
	 <A
HREF="comparison-ops.html#ICOMPARISON1"
>integer comparison</A
> test</P
><P
><A
HREF="comparison-ops.html#GT0REF"
> -gt </A
>,
         <I
CLASS="FIRSTTERM"
>greater-than</I
> <A
HREF="comparison-ops.html#ICOMPARISON1"
>integer
	 comparison</A
> test</P
><P
><A
HREF="textproc.html#GROFFREF"
><I
CLASS="FIRSTTERM"
>groff</I
></A
>,
        text markup and formatting language</P
><P
><A
HREF="contributed-scripts.html#GRONSFELD"
>Gronsfeld cipher</A
></P
><P
><A
HREF="internalvariables.html#GROUPSREF"
><TT
CLASS="VARNAME"
>$GROUPS</TT
></A
>,
         <I
CLASS="FIRSTTERM"
>Groups</I
> user belongs to</P
><P
><A
HREF="filearchiv.html#GZIPREF"
>gzip</A
>, compression utility</P
><P
>* * *</P
><P
><A
HREF="internal.html#HASHREF"
>Hashing</A
>, creating lookup keys
         in a table
	   <P
></P
><UL
><LI
><P
><A
HREF="contributed-scripts.html#HASHEX2_0"
><I
CLASS="FIRSTTERM"
>Example
	   script</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="textproc.html#HEADREF"
>head</A
>, <I
CLASS="FIRSTTERM"
>echo</I
>
        to <TT
CLASS="FILENAME"
>stdout</TT
> lines at the beginning of a text
        file</P
><P
><A
HREF="internal.html#HELPREF"
>help</A
>, gives usage summary of
        a Bash <A
HREF="internal.html#BUILTINREF"
>builtin</A
></P
><P
><A
HREF="here-docs.html#HEREDOCREF"
><I
CLASS="FIRSTTERM"
>Here</I
>
         documents</A
>

	 <P
></P
><UL
><LI
><P
><A
HREF="here-docs.html#ANONHEREDOC0"
><I
CLASS="FIRSTTERM"
>Anonymous</I
>
           here documents</A
>, using <B
CLASS="COMMAND"
>:</B
></P
><P
><A
HREF="here-docs.html#CBLOCK1"
>Commenting out</A
>
	   blocks of code</P
><P
><A
HREF="here-docs.html#HSELFDOC"
>Self-documenting</A
>
	   scripts</P
></LI
><LI
><P
><A
HREF="mathc.html#BCHEREDOC"
><I
CLASS="FIRSTTERM"
>bc</I
> in a <I
CLASS="FIRSTTERM"
>here
        document</I
></A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#CATSCRIPTREF"
><I
CLASS="FIRSTTERM"
>cat</I
>
         scripts</A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#HERECS"
>Command
         substitution</A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#EXSCRIPTREF"
><I
CLASS="FIRSTTERM"
>ex</I
>
         scripts</A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#HEREFUNC"
><I
CLASS="FIRSTTERM"
>Function</I
></A
>,
	 supplying input to</P
></LI
><LI
><P
><A
HREF="x17837.html#HERESTRINGSREF"
><I
CLASS="FIRSTTERM"
>Here</I
>
           strings</A
></P
><P
>Calculating the <A
HREF="mathc.html#GOLDENRATIO"
>Golden
          Ratio</A
></P
><P
><A
HREF="x17837.html#HSPRE"
>Prepending text</A
></P
><P
><A
HREF="x17837.html#HSLOOP"
>As the <TT
CLASS="FILENAME"
>stdin</TT
> of a
	  <I
CLASS="FIRSTTERM"
>loop</I
></A
></P
><P
><A
HREF="x17837.html#HSREAD"
>Using
	   <I
CLASS="FIRSTTERM"
>read</I
></A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#LIMITSTRINGREF"
><I
CLASS="FIRSTTERM"
>Limit</I
>
      string</A
></P
><P
><A
HREF="here-docs.html#EXCLLS"
><SPAN
CLASS="TOKEN"
>!</SPAN
> as a
         <I
CLASS="FIRSTTERM"
>limit string</I
></A
></P
><P
><A
HREF="here-docs.html#INDENTEDLS"
>Closing <I
CLASS="FIRSTTERM"
>limit
            string</I
></A
> may not be indented</P
><P
><A
HREF="here-docs.html#LIMITSTRDASH"
>Dash option</A
>
           to limit string, <TT
CLASS="OPTION"
>&#60;&#60;-LimitString</TT
>
           </P
></LI
><LI
><P
><A
HREF="here-docs.html#HERELIT"
>Literal
         text output</A
>,
	 for generating program code</P
></LI
><LI
><P
><A
HREF="here-docs.html#HEREPARAMSUB"
>Parameter
           substitution</A
></P
><P
><A
HREF="here-docs.html#HEREESC"
>Disabling</A
>
	   <I
CLASS="FIRSTTERM"
>parameter substitution</I
></P
></LI
><LI
><P
><A
HREF="here-docs.html#HEREPASSP"
>Passing
         parameters</A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#HERETEMP"
>Temporary
         files</A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#VIHERE"
>Using
        <I
CLASS="FIRSTTERM"
>vi</I
> non-interactively</A
></P
></LI
></UL
></P
><P
><A
HREF="histcommands.html"
>History commands</A
></P
><P
><A
HREF="internalvariables.html#HOMEDIRREF"
><TT
CLASS="VARNAME"
>$HOME</TT
></A
>,
         <I
CLASS="FIRSTTERM"
>user's home directory</I
></P
><P
><A
HREF="contributed-scripts.html#HOMEWORK"
>Homework assignment solver</A
></P
><P
><A
HREF="internalvariables.html#HOSTNAMEREF"
><TT
CLASS="VARNAME"
>$HOSTNAME</TT
></A
>,
        system <I
CLASS="FIRSTTERM"
>host name</I
></P
><P
>* * *</P
><P
><A
HREF="assortedtips.html#RCSREF"
><TT
CLASS="VARNAME"
>$Id</TT
>
        parameter</A
>, in <I
CLASS="FIRSTTERM"
>rcs</I
> (Revision Control
	System)</P
><P
><A
HREF="tests.html#IFTHEN"
>if [ condition ]; then ...</A
>
         <I
CLASS="FIRSTTERM"
>test</I
> construct
	 <P
></P
><UL
><LI
><P
><A
HREF="testconstructs.html#IFGREPREF"
>if-grep</A
>,
          <I
CLASS="FIRSTTERM"
>if</I
> and <A
HREF="textproc.html#GREPREF"
>grep</A
>
          in combination</P
><P
><A
HREF="assortedtips.html#IFGREPFIX"
>Fixup</A
>
          for <I
CLASS="FIRSTTERM"
>if-grep</I
> test</P
></LI
></UL
></P
><P
><A
HREF="internalvariables.html#IFSREF"
><TT
CLASS="VARNAME"
>$IFS</TT
></A
>,
         <I
CLASS="FIRSTTERM"
>Internal field separator</I
> variable
	   <P
></P
><UL
><LI
><P
><A
HREF="internalvariables.html#IFSWS"
>Defaults to
        <I
CLASS="FIRSTTERM"
>whitespace</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="comparison-ops.html#ICOMPARISON1"
>Integer comparison
         operators</A
></P
><P
><A
HREF="loops1.html#DOINREF"
>in</A
>,
         <I
CLASS="FIRSTTERM"
>keyword</I
> preceding
         <TT
CLASS="VARNAME"
>[list]</TT
> in a <I
CLASS="FIRSTTERM"
>for</I
>
         loop</P
><P
><A
HREF="system.html#INITTABREF"
>Initialization table</A
>,
         <TT
CLASS="FILENAME"
>/etc/inittab</TT
></P
><P
><A
HREF="special-chars.html#CODEBLOCKREF"
>Inline group</A
>,
        i.e., code block</P
><P
><A
HREF="intandnonint.html#IITEST"
>Interactive script</A
>, test for</P
><P
><A
HREF="io-redirection.html#IOREDIRREF"
>I/O redirection</A
></P
><P
><A
HREF="ivr.html#IVRREF"
>Indirect referencing of variables</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="ivr.html#IVR2"
>New notation</A
>, introduced
         in <A
HREF="bashver2.html#BASH2REF"
>version 2</A
> of Bash (<A
HREF="bashver2.html#VARREFNEW"
> example script</A
>)</P
></LI
></UL
></P
><P
><A
HREF="system.html#IPTABLESREF"
>iptables</A
>,
        packet filtering and firewall utility
         <P
></P
><UL
><LI
><P
><A
HREF="system.html#IPTABLES01"
>Usage
        example</A
></P
></LI
><LI
><P
><A
HREF="networkprogramming.html#IPTABLES02"
>Example
        script</A
></P
></LI
></UL
></P
><P
><A
HREF="loops1.html#ITERATIONREF"
>Iteration</A
></P
><P
>* * *</P
><P
><A
HREF="x9644.html#JOBIDTABLE0"
>Job IDs</A
>, table</P
><P
><A
HREF="extmisc.html#JOTREF"
>jot</A
>,
        Emit a sequence of integers. Equivalent to <A
HREF="extmisc.html#SEQREF"
>seq</A
>.
	  <P
></P
><UL
><LI
><P
><A
HREF="extmisc.html#JOTRANDOM"
>Random sequence
         generation</A
></P
></LI
></UL
></P
><P
><A
HREF="textproc.html#JABH"
>Just another Bash hacker!</A
></P
><P
>* * *</P
><P
><A
HREF="internal.html#KEYWORDREF"
>Keywords</A
>
	  <P
></P
><UL
><LI
><P
><A
HREF="debugging.html#MISSINGKEYWORD"
>error</A
>,
        if missing</P
></LI
></UL
></P
><P
><A
HREF="x9644.html#KILLREF"
>kill</A
>,
        terminate a process by <A
HREF="special-chars.html#PROCESSIDDEF"
>process ID</A
>
	  <P
></P
><UL
><LI
><P
><A
HREF="x9644.html#ZOMBIEREF"
>Options</A
> (<TT
CLASS="OPTION"
>-l</TT
>,
	<TT
CLASS="OPTION"
>-9</TT
>)</P
></LI
></UL
></P
><P
><A
HREF="x9644.html#KILLALLREF"
>killall</A
>,
        terminate a process <EM
>by name</EM
></P
><P
><A
HREF="sysscripts.html#KILLALL2REF"
><I
CLASS="FIRSTTERM"
>killall
         script</I
></A
> in <TT
CLASS="FILENAME"
>/etc/rc.d/init.d</TT
></P
><P
>* * *</P
><P
><A
HREF="bashver4.html#LASTPIPEREF"
>lastpipe</A
> shell
        option</P
><P
><A
HREF="comparison-ops.html#LE0REF"
> -le </A
>,
         <I
CLASS="FIRSTTERM"
>less-than or equal</I
>
	 <A
HREF="comparison-ops.html#ICOMPARISON1"
>integer comparison</A
> test</P
><P
><A
HREF="internal.html#LETREF"
>let</A
>,
        setting and carrying out arithmetic operations on variables
        <P
></P
><UL
><LI
><P
><I
CLASS="FIRSTTERM"
>C-style</I
>
        <A
HREF="internal.html#EX46"
>increment and decrement
        operators</A
></P
></LI
></UL
></P
><P
><A
HREF="here-docs.html#LIMITSTRINGREF"
>Limit string</A
>,
         in a <A
HREF="here-docs.html#HEREDOCREF"
>here document</A
></P
><P
><A
HREF="internalvariables.html#LINENOREF"
><TT
CLASS="VARNAME"
>$LINENO</TT
></A
>,
         variable indicating the <I
CLASS="FIRSTTERM"
>line number</I
> where
         it appears in a script</P
><P
><A
HREF="basic.html#LINKREF"
>Link</A
>, file
         (using <I
CLASS="FIRSTTERM"
>ln</I
> command)
	     <P
></P
><UL
><LI
><P
><A
HREF="basic.html#LINKMINVOK"
>Invoking script with multiple names</A
>,
          using <I
CLASS="FIRSTTERM"
>ln</I
></P
></LI
><LI
><P
><A
HREF="basic.html#SYMLINKREF"
><I
CLASS="FIRSTTERM"
>symbolic</I
>
	  links</A
>, <I
CLASS="FIRSTTERM"
>ln -s </I
></P
></LI
></UL
></P
><P
><A
HREF="list-cons.html#LISTCONSREF"
>List constructs</A
>
        <P
></P
><UL
><LI
><P
><A
HREF="list-cons.html#LCONS1"
><I
CLASS="FIRSTTERM"
>And</I
>
        list</A
></P
></LI
><LI
><P
><A
HREF="list-cons.html#ORLISTREF"
><I
CLASS="FIRSTTERM"
>Or</I
>
        list</A
></P
></LI
></UL
></P
><P
><A
HREF="localvar.html#LOCALREF1"
>Local variables</A
>
         <P
></P
><UL
><LI
><P
>and <A
HREF="localvar.html#LOCVARRECUR"
>recursion</A
></P
></LI
></UL
></P
><P
><A
HREF="localization.html"
>Localization</A
></P
><P
><A
HREF="ops.html#LOGOPS1"
>Logical operators</A
>
         (<TT
CLASS="VARNAME"
>&#38;&#38;</TT
>, <TT
CLASS="VARNAME"
>||</TT
>,
         etc.)</P
><P
><A
HREF="files.html#LOGOUTFILEREF1"
>Logout file</A
>,
         the <TT
CLASS="FILENAME"
>~/.bash_logout</TT
> file</P
><P
><A
HREF="system.html#ISOMOUNTREF0"
>Loopback device</A
>,
         mounting a file on a <A
HREF="devref1.html#BLOCKDEVREF"
>block
	 device</A
></P
><P
><A
HREF="loops1.html"
>Loops</A
>
        <P
></P
><UL
><LI
><P
><A
HREF="loopcontrol.html#BRKCONT1"
>break</A
>
         loop control command</P
></LI
><LI
><P
><A
HREF="loopcontrol.html#BRKCONT1"
>continue</A
> loop
        control command</P
></LI
><LI
><P
><I
CLASS="FIRSTTERM"
>C</I
>-style
	loop within <A
HREF="dblparens.html#DBLPARENSREF"
>double
	parentheses</A
></P
><P
><A
HREF="loops1.html#LOOPCSTYLE"
><I
CLASS="FIRSTTERM"
>for</I
> loop</A
></P
><P
><A
HREF="loops1.html#WLOOPCSTYLE"
><I
CLASS="FIRSTTERM"
>while</I
> loop</A
></P
></LI
><LI
><P
><A
HREF="loops1.html#DOINREF"
>do</A
> (keyword),
         begins execution of commands within a loop</P
></LI
><LI
><P
><A
HREF="loops1.html#DOINREF"
>done</A
> (keyword),
         terminates a loop</P
></LI
><LI
><P
><A
HREF="loops1.html#FORLOOPREF1"
><I
CLASS="FIRSTTERM"
>for</I
>
           loops</A
></P
><P
><TT
CLASS="REPLACEABLE"
><I
>for</I
></TT
> <TT
CLASS="VARNAME"
>arg</TT
>
          <TT
CLASS="REPLACEABLE"
><I
>in</I
></TT
> <TT
CLASS="VARNAME"
>[list]</TT
>;
          <TT
CLASS="REPLACEABLE"
><I
>do</I
></TT
></P
><P
><A
HREF="loops1.html#LOOPCS"
><I
CLASS="FIRSTTERM"
>Command
	  substitution</I
> to generate
	  <TT
CLASS="VARNAME"
>[list]</TT
></A
></P
><P
><A
HREF="loops1.html#LIGLOB"
>Filename expansion
	  in <TT
CLASS="VARNAME"
>[list]</TT
></A
></P
><P
><A
HREF="loops1.html#MULTPARAML"
>Multiple parameters
	  in each <TT
CLASS="VARNAME"
>[list]</TT
> element</A
></P
><P
><A
HREF="loops1.html#OMITLIST"
>Omitting
	  <TT
CLASS="VARNAME"
>[list]</TT
></A
>, defaults to
	  <A
HREF="internalvariables.html#POSPARAMREF"
>positional parameters</A
></P
><P
><A
HREF="loops1.html#PARAMLI"
>Parameterizing
	   <TT
CLASS="VARNAME"
>[list]</TT
></A
></P
><P
><A
HREF="loops1.html#LOOPREDIR"
>Redirection</A
></P
></LI
><LI
><P
><A
HREF="loops1.html#DOINREF"
>in</A
>,
         (keyword) preceding [list] in a
         <I
CLASS="FIRSTTERM"
>for</I
> loop</P
></LI
><LI
><P
><A
HREF="nestedloops.html"
>Nested
         loops</A
></P
></LI
><LI
><P
><A
HREF="special-chars.html#BGLOOP0"
>Running a
         loop <EM
>in the background</EM
></A
>,
	 <I
CLASS="FIRSTTERM"
>script example</I
></P
></LI
><LI
><P
>Semicolon required, when <I
CLASS="FIRSTTERM"
>do</I
> is on first line
	  of loop</P
><P
><A
HREF="loops1.html#NEEDSEMICOLON"
><I
CLASS="FIRSTTERM"
>for</I
>
	  loop</A
></P
><P
><A
HREF="loops1.html#WHILENEEDSEMI"
><I
CLASS="FIRSTTERM"
>while</I
>
	  loop</A
></P
></LI
><LI
><P
><A
HREF="loops1.html#UNTILLOOPREF"
>until</A
> loop</P
><P
><TT
CLASS="REPLACEABLE"
><I
>until [ condition-is-true ]; do</I
></TT
>
	 </P
></LI
><LI
><P
><A
HREF="loops1.html#WHILELOOPREF"
>while</A
>
        loop</P
><P
><TT
CLASS="REPLACEABLE"
><I
>while [ condition ]; do</I
></TT
></P
><P
><A
HREF="loops1.html#WHILEFUNC"
>Function call</A
>
	  inside test brackets</P
><P
><A
HREF="loops1.html#WHMULTCOND"
>Multiple conditions</A
></P
><P
><A
HREF="loops1.html#WHILENOBRACKETS"
>Omitting <I
CLASS="FIRSTTERM"
>test
	  brackets</I
></A
></P
><P
><A
HREF="loops1.html#WHREDIR"
>Redirection</A
></P
><P
><A
HREF="loops1.html#WHILEREADREF2"
>         <I
CLASS="FIRSTTERM"
>while read</I
></A
> construct</P
></LI
><LI
><P
><A
HREF="loops1.html#CHOOSELOOP"
>Which type of loop to
        use</A
></P
></LI
></UL
></P
><P
>Loopback devices
         <P
></P
><UL
><LI
><P
><A
HREF="devref1.html#LOOPBACKREF"
>In <TT
CLASS="FILENAME"
>/dev</TT
> directory</A
></P
></LI
><LI
><P
><A
HREF="system.html#ISOMOUNTREF0"
>Mounting an ISO image</A
></P
></LI
></UL
></P
><P
><A
HREF="comparison-ops.html#LT0REF"
> -lt </A
>,
         <I
CLASS="FIRSTTERM"
>less-than</I
> <A
HREF="comparison-ops.html#ICOMPARISON1"
>integer
	 comparison</A
> test</P
><P
>* * *</P
><P
><A
HREF="extmisc.html#M4REF"
>m4</A
>, macro processing language</P
><P
><A
HREF="internalvariables.html#MACHTYPEREF"
><TT
CLASS="VARNAME"
>$MACHTYPE</TT
></A
>,
         <I
CLASS="FIRSTTERM"
>Machine type</I
></P
><P
><A
HREF="sha-bang.html#MAGNUMREF"
>Magic number</A
>,
         marker at the head of a file indicating the file type</P
><P
><A
HREF="filearchiv.html#MAKEFILEREF"
><TT
CLASS="FILENAME"
>Makefile</TT
></A
>,
         file containing the list of dependencies used by <A
HREF="filearchiv.html#MAKEREF"
>make</A
> command</P
><P
><A
HREF="basic.html#MANREF"
>man</A
>, <I
CLASS="FIRSTTERM"
>manual
        page</I
> (lookup)
         <P
></P
><UL
><LI
><P
><A
HREF="contributed-scripts.html#MANED"
><I
CLASS="FIRSTTERM"
>Man page</I
>
         editor</A
> (script)</P
></LI
></UL
>
      </P
><P
><A
HREF="bashver4.html#MAPFILEREF"
>mapfile</A
> builtin,
        loads an array with a text file</P
><P
><A
HREF="mathc.html"
>Math commands</A
></P
><P
><A
HREF="x17129.html#METAMEANINGREF"
>Meta-meaning</A
></P
><P
><A
HREF="contributed-scripts.html#SAMORSE"
>Morse code training</A
> script</P
><P
><A
HREF="ops.html#MODULOREF"
>Modulo</A
>, arithmetic
         <I
CLASS="FIRSTTERM"
>remainder</I
> operator
	    <P
></P
><UL
><LI
><P
>Application: <A
HREF="contributed-scripts.html#PRIMES1"
>Generating
            prime numbers</A
></P
></LI
></UL
></P
><P
><A
HREF="mathc.html#MONTHLYPMT0"
>Mortgage calculations</A
>,
        <I
CLASS="FIRSTTERM"
>example script</I
></P
><P
>* * *</P
><P
><B
CLASS="COMMAND"
>-n </B
>
        <A
HREF="comparison-ops.html#STRINGNOTNULL"
>String not
        <I
CLASS="FIRSTTERM"
>null</I
></A
> test</P
><P
><A
HREF="extmisc.html#NAMEDPIPEREF"
>Named pipe</A
>, a temporary
         FIFO buffer
	 <P
></P
><UL
><LI
><P
><A
HREF="contributed-scripts.html#ZFIFO"
><I
CLASS="FIRSTTERM"
>Example
         script</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="system.html#NCREF"
>nc</A
>, <I
CLASS="FIRSTTERM"
>netcat</I
>,
        a network toolkit for TCP and UDP ports</P
><P
><A
HREF="comparison-ops.html#NEQUALREF"
>-ne</A
>,
         <I
CLASS="FIRSTTERM"
>not-equal-to</I
> <A
HREF="comparison-ops.html#ICOMPARISON1"
>integer comparison</A
> test</P
><P
><A
HREF="special-chars.html#NOTREF"
>Negation operator</A
>,
         <B
CLASS="COMMAND"
>!</B
>, reverses the sense of a <A
HREF="tests.html#IFTHEN"
>test</A
></P
><P
><A
HREF="system.html#NETSTATREF"
>netstat</A
>, Network
         statistics</P
><P
><A
HREF="networkprogramming.html"
>Network programming</A
></P
><P
><A
HREF="textproc.html#NLREF"
>nl</A
>, a filter to number lines of
        text</P
><P
><A
HREF="options.html#NOCLOBBERREF"
><I
CLASS="FIRSTTERM"
>Noclobber</I
></A
>,
         <TT
CLASS="OPTION"
>-C</TT
> option to Bash to prevent overwriting
         of files</P
><P
><A
HREF="ops.html#LOGOPS1"
><I
CLASS="FIRSTTERM"
>NOT</I
> logical
        operator</A
>, <B
CLASS="COMMAND"
>!</B
></P
><P
><A
HREF="othertypesv.html#NULLVAR"
><I
CLASS="FIRSTTERM"
>null</I
> variable
        assignment</A
>, avoiding</P
><P
>* * *</P
><P
><B
CLASS="COMMAND"
>-o </B
>
        <A
HREF="comparison-ops.html#COMPOUNDOR"
>Logical OR</A
>
	compound comparison test</P
><P
>Obfuscation
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#COLONFNAME"
><I
CLASS="FIRSTTERM"
>Colon</I
></A
>
	as function name</P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#HOMEWORK"
>Homework assignment</A
></P
></LI
><LI
><P
><A
HREF="textproc.html#JABH"
>Just another Bash
        hacker!</A
></P
></LI
></UL
>
	 </P
><P
><A
HREF="escapingsection.html#OCTALREF"
>octal</A
>, base-8 numbers</P
><P
><A
HREF="extmisc.html#ODREF"
>od</A
>, <I
CLASS="FIRSTTERM"
>octal
        dump</I
></P
><P
><A
HREF="internalvariables.html#OLDPWD"
><TT
CLASS="VARNAME"
>$OLDPWD</TT
></A
>
         Previous working directory</P
><P
><A
HREF="filearchiv.html#OPENSSLREF"
>openssl</A
> encryption
        utility</P
><P
>Operator
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#OPERATORDEF"
>Definition
        of</A
></P
></LI
><LI
><P
><A
HREF="opprecedence.html#OPPRECEDENCE1"
>Precedence</A
></P
></LI
></UL
></P
><P
><A
HREF="options.html#OPTIONSREF"
>Options</A
>,
         passed to shell or script on command line or by <A
HREF="internal.html#SETREF"
>set</A
> command</P
><P
><A
HREF="list-cons.html#ORLISTREF"
><I
CLASS="FIRSTTERM"
>Or</I
>
        list</A
></P
><P
><A
HREF="ops.html#ORREF"
><I
CLASS="FIRSTTERM"
>Or</I
> logical
        operator</A
>, <B
CLASS="COMMAND"
>||</B
></P
><P
>* * *</P
><P
><A
HREF="parameter-substitution.html#PARAMSUBREF"
>Parameter
         substitution</A
>
	   <P
></P
><UL
><LI
><P
><I
CLASS="FIRSTTERM"
>${parameter+alt_value}</I
></P
><P
><I
CLASS="FIRSTTERM"
>${parameter:+alt_value}</I
></P
><P
><A
HREF="parameter-substitution.html#PARAMALTV"
>Alternate value</A
>
          of parameter, if set</P
></LI
><LI
><P
><I
CLASS="FIRSTTERM"
>${parameter-default}</I
></P
><P
><I
CLASS="FIRSTTERM"
>${parameter:-default}</I
></P
><P
><I
CLASS="FIRSTTERM"
>${parameter=default}</I
></P
><P
><I
CLASS="FIRSTTERM"
>${parameter:=default}</I
></P
><P
><A
HREF="parameter-substitution.html#DEFPARAM1"
>Default
        parameters</A
></P
></LI
><LI
><P
><I
CLASS="FIRSTTERM"
>${!varprefix*}</I
></P
><P
><I
CLASS="FIRSTTERM"
>${!varprefix@}</I
></P
><P
><A
HREF="parameter-substitution.html#VARPREFIXM"
>Parameter
        <EM
>name</EM
> match</A
></P
></LI
><LI
><P
><I
CLASS="FIRSTTERM"
>${parameter?err_msg}</I
></P
><P
><A
HREF="parameter-substitution.html#QERRMSG"
>Parameter-unset message</A
></P
></LI
><LI
><P
><I
CLASS="FIRSTTERM"
>${parameter}</I
></P
><P
><A
HREF="parameter-substitution.html#PSSUB1"
>Value of
	<I
CLASS="FIRSTTERM"
>parameter</I
></A
></P
></LI
><LI
><P
><A
HREF="bashver4.html#CASEMODPARAMSUB"
>        <I
CLASS="FIRSTTERM"
>Case modification</I
></A
>
	(<A
HREF="bashver4.html#BASH4REF"
>version 4+</A
> of
	Bash).</P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#PW0"
><I
CLASS="FIRSTTERM"
>Script
        example</I
></A
></P
></LI
><LI
><P
><A
HREF="refcards.html#PARSUBTAB"
><B
CLASS="COMMAND"
>Table</B
></A
>
        of <I
CLASS="FIRSTTERM"
>parameter
        substitution</I
></P
></LI
></UL
></P
><P
><A
HREF="gotchas.html#PARCHILDPROBREF"
>Parent / child process
         problem</A
>, a <I
CLASS="FIRSTTERM"
>child</I
> process cannot
         <A
HREF="internal.html#EXPORTREF"
>export</A
> variables to a <A
HREF="internal.html#FORKREF"
>parent process</A
></P
><P
>Parentheses
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#PARENSREF"
>Command
         group</A
></P
></LI
><LI
><P
><A
HREF="x17129.html#PARENGRPS"
>Enclose group</A
>
	 of <I
CLASS="FIRSTTERM"
>Extended Regular
	 Expressions</I
></P
></LI
><LI
><P
><A
HREF="dblparens.html#DBLPARENSREF"
>Double parentheses</A
>,
         in arithmetic expansion</P
></LI
></UL
></P
><P
><A
HREF="internalvariables.html#PATHREF"
><TT
CLASS="VARNAME"
>$PATH</TT
></A
>,
         the <I
CLASS="FIRSTTERM"
>path</I
> (location of system
         binaries)
         <P
></P
><UL
><LI
><P
>Appending directories to <TT
CLASS="VARNAME"
>$PATH</TT
>
      <A
HREF="bashver3.html#PATHAPPEND"
>using the <TT
CLASS="VARNAME"
>+=</TT
>
        operator</A
>.</P
></LI
></UL
></P
><P
><A
HREF="special-chars.html#PATHNAMEREF"
>Pathname</A
>,
        a <TT
CLASS="FILENAME"
>filename</TT
> that incorporates the complete
	<I
CLASS="FIRSTTERM"
>path</I
> of a given file.
         <P
></P
><UL
><LI
><P
><A
HREF="pathmanagement.html"
>Parsing
      <I
CLASS="FIRSTTERM"
>pathnames</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="wrapper.html#PERLREF"
>Perl</A
>, programming language
         <P
></P
><UL
><LI
><P
><A
HREF="wrapper.html#BASHANDPERL0"
>Combined</A
> in the
        same file with a <I
CLASS="FIRSTTERM"
>Bash</I
> script</P
></LI
><LI
><P
><A
HREF="wrapper.html#PERLEMB"
>Embedded</A
> in a
        <I
CLASS="FIRSTTERM"
>Bash</I
> script</P
></LI
></UL
></P
><P
><A
HREF="contributed-scripts.html#QKY"
><EM
>Perquackey</EM
>-type
        anagramming game</A
> (<EM
>Quackey</EM
> script)</P
><P
><A
HREF="contributed-scripts.html#PETALS"
><EM
>Petals Around the
        Rose</EM
></A
></P
><P
><A
HREF="special-chars.html#PROCESSIDDEF"
>PID</A
>,
        <I
CLASS="FIRSTTERM"
>Process ID</I
>, an identification
	number assigned to a running process.</P
><P
><A
HREF="special-chars.html#PIPEREF"
>Pipe</A
>, <B
CLASS="COMMAND"
>| </B
>,
         a device for passing the output of a command to another command
         or to the shell

	   <P
></P
><UL
><LI
><P
><A
HREF="optimizations.html#CATABUSE"
>Avoiding
        unnecessary commands</A
> in a
        <I
CLASS="FIRSTTERM"
>pipe</I
></P
></LI
><LI
><P
><A
HREF="special-chars.html#COMMINPIPE"
><I
CLASS="FIRSTTERM"
>Comments</I
> embedded
	within</A
></P
></LI
><LI
><P
><A
HREF="exit-status.html#PIPEEX"
>Exit status</A
>
         of a pipe</P
></LI
><LI
><P
><A
HREF="bashver3.html#PIPEFAILREF"
>Pipefail</A
>,
         <I
CLASS="FIRSTTERM"
>set -o pipefail</I
>
         option to indicate <A
HREF="exit-status.html#EXITSTATUSREF"
>exit status</A
>
         within a <I
CLASS="FIRSTTERM"
>pipe</I
></P
></LI
><LI
><P
><A
HREF="internalvariables.html#PIPESTATUSREF"
><TT
CLASS="VARNAME"
>$PIPESTATUS</TT
></A
>,
	<I
CLASS="FIRSTTERM"
>exit status</I
> of last executed
	pipe</P
></LI
><LI
><P
><A
HREF="special-chars.html#UCREF"
>Piping output of a command</A
>
         to a script</P
></LI
><LI
><P
><A
HREF="basic.html#CATLESSEFF"
>Redirecting
        <TT
CLASS="FILENAME"
>stdin</TT
></A
>, rather than using
	<A
HREF="basic.html#CATREF"
>cat</A
> in a
	<I
CLASS="FIRSTTERM"
>pipe</I
></P
></LI
></UL
></P
><P
><A
HREF="gotchas.html"
>Pitfalls</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="gotchas.html#DASHNREDR"
><B
CLASS="COMMAND"
>-</B
>
        (dash) is <EM
>not</EM
> redirection
        operator</A
></P
></LI
><LI
><P
><A
HREF="internal.html#DOUBLESLASHREF"
><B
CLASS="COMMAND"
>//
        </B
> (double forward slash)</A
>, behavior of <A
HREF="internal.html#CDREF"
>cd</A
> command toward</P
></LI
><LI
><P
><A
HREF="gotchas.html#BINSH"
><SPAN
CLASS="TOKEN"
>#!/bin/sh</SPAN
></A
>
	script header disables <A
HREF="portabilityissues.html#BASHCOMPAT"
>extended <I
CLASS="FIRSTTERM"
>Bash</I
> 
	features</A
></P
></LI
><LI
><P
><A
HREF="optimizations.html#CATABUSE"
>Abuse of
        <I
CLASS="FIRSTTERM"
>cat</I
></A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#CGIREF"
><I
CLASS="FIRSTTERM"
>CGI</I
>
        programming</A
>, using scripts for</P
></LI
><LI
><P
>Closing <I
CLASS="FIRSTTERM"
>limit string</I
>
        in a <I
CLASS="FIRSTTERM"
>here document</I
>,
      <A
HREF="here-docs.html#INDENTEDLS"
>indenting</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#DOSNEWLINES"
>DOS-type newlines
        (<SPAN
CLASS="TOKEN"
>\r\n</SPAN
>)</A
> crash a script</P
></LI
><LI
><P
><A
HREF="quotingvar.html#QUOTINGBSL"
><I
CLASS="FIRSTTERM"
>Double-quoting</I
>
        the <I
CLASS="FIRSTTERM"
>backslash</I
> (<B
CLASS="COMMAND"
>\</B
>)
        character</A
></P
></LI
><LI
><P
><A
HREF="internal.html#EVALRISK"
>eval</A
>, risk of
        using</P
></LI
><LI
><P
><A
HREF="gotchas.html#EXECPERM"
>Execute permission
        lacking</A
> for commands within a script</P
></LI
><LI
><P
>      <I
CLASS="FIRSTTERM"
>Exit status</I
>,
      <A
HREF="gotchas.html#GOTCHAEXITVALANAMALIES"
>anomalous</A
>
      </P
></LI
><LI
><P
>      <I
CLASS="FIRSTTERM"
>Exit status</I
>
      <A
HREF="gotchas.html#ARXS1"
>of arithmetic expression <EM
>not</EM
>
      equivalent to an <I
CLASS="FIRSTTERM"
>error code</I
></A
>
      </P
></LI
><LI
><P
><A
HREF="gotchas.html#PARCHILDPROBREF"
><I
CLASS="FIRSTTERM"
>Export</I
>
         problem</A
>, <I
CLASS="FIRSTTERM"
>child</I
> process
	 to <I
CLASS="FIRSTTERM"
>parent</I
> process</P
></LI
><LI
><P
><A
HREF="gotchas.html#LATEVERF"
>Extended
        <I
CLASS="FIRSTTERM"
>Bash</I
> features</A
> not
	available</P
></LI
><LI
><P
><A
HREF="gotchas.html#FAILQUOTE"
>Failing to
        <I
CLASS="FIRSTTERM"
>quote</I
> variables</A
>
	within <I
CLASS="FIRSTTERM"
>test</I
> brackets</P
></LI
><LI
><P
><A
HREF="gotchas.html#GNUREF"
><I
CLASS="FIRSTTERM"
>GNU</I
>
         command set</A
>, in cross-platform scripts</P
></LI
><LI
><P
><I
CLASS="FIRSTTERM"
>let</I
> misuse:
         <A
HREF="gotchas.html#LETBAD"
>attempting to set string variables</A
>
	 </P
></LI
><LI
><P
><A
HREF="gotchas.html#RVTCAUTION2"
>Multiple echo
        statements</A
> in a <A
HREF="assortedtips.html#RVT"
>function whose
	output is captured</A
></P
></LI
><LI
><P
><A
HREF="othertypesv.html#NULLVAR"
><I
CLASS="FIRSTTERM"
>null</I
>
        variable assignment</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#NUMSTRCOMPNE"
>Numerical and string
          comparison operators</A
> <EM
>not</EM
>
          equivalent</P
><P
><A
HREF="gotchas.html#EQDIF"
><B
CLASS="COMMAND"
>=</B
>
          and <B
CLASS="COMMAND"
>-eq</B
></A
> <EM
>not</EM
>
	  interchangeable</P
></LI
><LI
><P
><A
HREF="gotchas.html#OMITSEMICOLON"
>Omitting
         terminal <I
CLASS="FIRSTTERM"
>semicolon</I
></A
>,
	 in a <I
CLASS="FIRSTTERM"
>curly-bracketed</I
> <A
HREF="special-chars.html#CODEBLOCKREF"
>code block</A
></P
></LI
><LI
><P
>Piping</P
><P
><A
HREF="gotchas.html#PIPELOOP"
><I
CLASS="FIRSTTERM"
>echo</I
>
	   to a loop</A
></P
><P
><A
HREF="gotchas.html#BADREAD0"
><I
CLASS="FIRSTTERM"
>echo</I
>
	   to <I
CLASS="FIRSTTERM"
>read</I
></A
> (however, this problem
	   <A
HREF="process-sub.html#GOODREAD0"
>can be circumvented</A
>)</P
><P
><A
HREF="gotchas.html#PTAILGREP"
><I
CLASS="FIRSTTERM"
>tail</I
>
	   <TT
CLASS="OPTION"
>-f</TT
> to <I
CLASS="FIRSTTERM"
>grep</I
></A
></P
></LI
><LI
><P
>Preserving <I
CLASS="FIRSTTERM"
>whitespace</I
>
        within a variable, <A
HREF="quotingvar.html#VARSPLITTING"
>unintended
	consequences</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#SUIDSCR"
><I
CLASS="FIRSTTERM"
>suid</I
>
           commands inside a script</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#UNDOCF"
>Undocumented
        <I
CLASS="FIRSTTERM"
>Bash</I
> features</A
>,
	danger of</P
></LI
><LI
><P
>Updates to <I
CLASS="FIRSTTERM"
>Bash</I
>
        <A
HREF="gotchas.html#UPDATEBREAKS"
>breaking older
        scripts</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#UNINITVAR"
>Uninitialized
         variables</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#INAPPVN"
>Variable names</A
>,
         inappropriate</P
></LI
><LI
><P
><A
HREF="gotchas.html#VARSUBSH"
>Variables in a
        <I
CLASS="FIRSTTERM"
>subshell</I
></A
>, <I
CLASS="FIRSTTERM"
>scope</I
>
	limited</P
></LI
><LI
><P
><A
HREF="gotchas.html#BADREAD0"
>Subshell in <I
CLASS="FIRSTTERM"
>while-read</I
>
	loop</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#WSBAD"
>Whitespace</A
>,
         misuse of</P
></LI
></UL
></P
><P
>Pointers</P
><P
></P
><UL
><LI
><P
><A
HREF="io-redirection.html#FDREF1"
>and file descriptors</A
></P
></LI
><LI
><P
><A
HREF="complexfunct.html#FUNCPOINTERS"
>and functions</A
></P
></LI
><LI
><P
><A
HREF="ivr.html#IRRREF"
>and <I
CLASS="FIRSTTERM"
>indirect
         references</I
></A
></P
></LI
><LI
><P
><A
HREF="varsubn.html#POINTERREF"
>and
         <I
CLASS="FIRSTTERM"
>variables</I
></A
></P
></LI
></UL
><P
><A
HREF="portabilityissues.html"
>Portability issues</A
>
        in shell scripting
	   <P
></P
><UL
><LI
><P
><A
HREF="assortedtips.html#SETPUM"
>Setting <I
CLASS="FIRSTTERM"
>path</I
>
	  and <I
CLASS="FIRSTTERM"
>umask</I
></A
></P
></LI
><LI
><P
><A
HREF="portabilityissues.html#TESTSUITE0"
>A <I
CLASS="FIRSTTERM"
>test suite</I
>
	  script</A
> (Bash versus classic Bourne
	  shell)</P
></LI
><LI
><P
><A
HREF="assortedtips.html#WHATISREF3"
>Using <I
CLASS="FIRSTTERM"
>whatis</I
></A
>
	  </P
></LI
></UL
></P
><P
><A
HREF="othertypesv.html#POSPARAMREF1"
>Positional parameters</A
>

	   <P
></P
><UL
><LI
><P
><A
HREF="internalvariables.html#APPREF2"
><TT
CLASS="VARNAME"
>$@</TT
></A
>,
      as <I
CLASS="FIRSTTERM"
>separate</I
> words</P
></LI
><LI
><P
><A
HREF="internalvariables.html#APPREF"
><TT
CLASS="VARNAME"
>$*</TT
></A
>,
      as a <I
CLASS="FIRSTTERM"
>single</I
> word</P
></LI
><LI
><P
><A
HREF="complexfunct.html#PASSEDARGS"
>in
        functions</A
></P
></LI
></UL
></P
><P
><A
HREF="sha-bang.html#POSIX2REF"
><SPAN
CLASS="ACRONYM"
>POSIX</SPAN
></A
>,
         <I
CLASS="FIRSTTERM"
>Portable Operating System Interface /
         UNIX</I
>

         <P
></P
><UL
><LI
><P
><A
HREF="portabilityissues.html#POSIX3REF"
><TT
CLASS="OPTION"
>--posix</TT
>
        option</A
></P
></LI
><LI
><P
><A
HREF="portabilityissues.html#POSIX3REF"
>1003.2 standard</A
></P
></LI
><LI
><P
><A
HREF="x17129.html#POSIXREF"
>Character
         classes</A
></P
></LI
></UL
></P
><P
><A
HREF="internalvariables.html#PPIDREF"
><TT
CLASS="VARNAME"
>$PPID</TT
></A
>,
         <I
CLASS="FIRSTTERM"
>process ID</I
> of parent process</P
><P
><A
HREF="opprecedence.html#OPPRECEDENCE1"
>Precedence</A
>, operator</P
><P
><A
HREF="assortedtips.html#PREPENDREF"
><I
CLASS="FIRSTTERM"
>Prepending</I
></A
>
         lines at head of a file, <I
CLASS="FIRSTTERM"
>script
         example</I
></P
><P
>Prime numbers
          <P
></P
><UL
><LI
><P
>Generating primes
         <A
HREF="mathc.html#PRIMES2"
>using the <I
CLASS="FIRSTTERM"
>factor</I
>
         command</A
></P
></LI
><LI
><P
>Generating primes
         <A
HREF="contributed-scripts.html#PRIMES1"
>using the <I
CLASS="FIRSTTERM"
>modulo</I
>
         operator</A
></P
></LI
><LI
><P
>Sieve of Eratosthenes, <A
HREF="arrays.html#PRIMES0"
>example script</A
></P
></LI
></UL
></P
><P
><A
HREF="internal.html#PRINTFREF"
>printf</A
>,
        <I
CLASS="FIRSTTERM"
>formatted print</I
> command</P
><P
><A
HREF="procref1.html#PROCREF2"
><TT
CLASS="FILENAME"
>/proc</TT
></A
> directory
          <P
></P
><UL
><LI
><P
><A
HREF="procref1.html#PROCRUNNING"
>Running processes</A
>,
        files describing</P
></LI
><LI
><P
><A
HREF="procref1.html#PROCWARNING"
>Writing to
        files in <TT
CLASS="FILENAME"
>/proc</TT
></A
>,
	<EM
>warning</EM
></P
></LI
></UL
></P
><P
><A
HREF="special-chars.html#PROCESSREF"
>Process</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="othertypesv.html#CHILDREF2"
>Child
        process</A
></P
></LI
><LI
><P
><A
HREF="internal.html#PARENTREF"
>Parent
        process</A
></P
></LI
><LI
><P
><A
HREF="special-chars.html#PROCESSIDDEF"
>Process
      ID</A
> (PID)</P
></LI
></UL
></P
><P
><A
HREF="process-sub.html#PROCESSSUBREF"
>Process substitution</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="process-sub.html#PCC2DIR"
>To compare contents of
           directories</A
></P
></LI
><LI
><P
><A
HREF="process-sub.html#PSFDSTDIN"
>To supply <TT
CLASS="FILENAME"
>stdin</TT
> of a
         command</A
></P
></LI
><LI
><P
><A
HREF="process-sub.html#COMMANDSPARENS1"
>Template</A
></P
></LI
><LI
><P
><A
HREF="process-sub.html#GOODREAD0"
><I
CLASS="FIRSTTERM"
>while-read</I
> loop
	 without a
	 <I
CLASS="FIRSTTERM"
>subshell</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="tabexpansion.html"
>Programmable completion</A
>
        (tab expansion)</P
><P
>Prompt

         <P
></P
><UL
><LI
><P
><A
HREF="internalvariables.html#PS1REF"
><TT
CLASS="VARNAME"
>$PS1</TT
></A
>, <I
CLASS="FIRSTTERM"
>Main
         prompt</I
>, seen at command
         line</P
></LI
><LI
><P
><A
HREF="internalvariables.html#SECPROMPTREF"
><TT
CLASS="VARNAME"
>$PS2</TT
></A
>,
         Secondary prompt</P
></LI
></UL
></P
><P
><A
HREF="assortedtips.html#PSEUDOCODEREF"
>Pseudo-code</A
>,
         as problem-solving method</P
><P
><A
HREF="internalvariables.html#PWDREF"
><TT
CLASS="VARNAME"
>$PWD</TT
></A
>,
         Current working directory</P
><P
>* * *</P
><P
><A
HREF="contributed-scripts.html#QKY"
>Quackey</A
>, a
        <EM
>Perquackey</EM
>-type anagramming game (script)</P
><P
>Question mark, <B
CLASS="COMMAND"
>? </B
>
         <P
></P
><UL
><LI
><P
><A
HREF="x17129.html#QUEXREGEX"
>Character
             match</A
> in an Extended <I
CLASS="FIRSTTERM"
>Regular
             Expression</I
></P
></LI
><LI
><P
><A
HREF="special-chars.html#QUEXWC"
>Single-character
	     <I
CLASS="FIRSTTERM"
>wild card</I
></A
>,
	     in <A
HREF="globbingref.html"
>globbing</A
></P
></LI
><LI
><P
>In a
              <A
HREF="special-chars.html#CSTRINARY"
><I
CLASS="FIRSTTERM"
>C</I
>-style
              Trinary (ternary) operator</A
></P
></LI
></UL
></P
><P
><A
HREF="quoting.html#QUOTINGDEF"
>Quoting</A
>
        <P
></P
><UL
><LI
><P
><A
HREF="quoting.html#QUOTINGREF"
>Character
        string</A
></P
></LI
><LI
><P
><A
HREF="quotingvar.html"
>Variables</A
></P
><P
><A
HREF="gotchas.html#FAILQUOTE"
>within <I
CLASS="FIRSTTERM"
>test</I
>
          brackets</A
></P
></LI
><LI
><P
><A
HREF="quotingvar.html#WSQUO"
><I
CLASS="FIRSTTERM"
>Whitespace</I
></A
>,
	  using <I
CLASS="FIRSTTERM"
>quoting</I
> to
	  preserve</P
></LI
></UL
></P
><P
>* * *</P
><P
>Random numbers

         <P
></P
><UL
><LI
><P
><A
HREF="randomvar.html#URANDOMREF"
><TT
CLASS="FILENAME"
>/dev/urandom</TT
></A
>
	</P
></LI
><LI
><P
><A
HREF="randomvar.html#AWKRANDOMREF"
>         <TT
CLASS="VARNAME"
>rand()</TT
></A
>,
	 random function in <A
HREF="awk.html#AWKREF"
>awk</A
></P
></LI
><LI
><P
><A
HREF="randomvar.html#RANDOMVAR01"
><TT
CLASS="VARNAME"
>$RANDOM</TT
></A
>, Bash
        function that returns a pseudorandom integer</P
></LI
><LI
><P
><A
HREF="timedate.html#DATERANDREF"
>Random sequence
        generation</A
>, using <A
HREF="timedate.html#DATEREF"
>date</A
>
        command</P
></LI
><LI
><P
><A
HREF="extmisc.html#JOTRANDOM"
>Random sequence
         generation</A
>, using <A
HREF="extmisc.html#JOTREF"
>jot</A
></P
></LI
><LI
><P
><A
HREF="string-manipulation.html#RANDSTRING0"
>Random string</A
>,
        generating</P
></LI
></UL
></P
><P
>Raspberry Pi (single-board computer)

         <P
></P
><UL
><LI
><P
><A
HREF="extmisc.html#RPSDCARD01"
>Script for preparing a bootable SD card</A
>
	</P
></LI
></UL
></P
><P
><A
HREF="assortedtips.html#RCSREF"
>rcs</A
></P
><P
><A
HREF="internal.html#READREF"
>read</A
>, set value of a
        variable from <A
HREF="ioredirintro.html#STDINOUTDEF"
><TT
CLASS="FILENAME"
>stdin</TT
></A
>
         <P
></P
><UL
><LI
><P
><A
HREF="internal.html#READARROW"
>Detecting
        <I
CLASS="FIRSTTERM"
>arrow</I
> keys</A
></P
></LI
><LI
><P
><A
HREF="internal.html#READOPTIONS"
>Options</A
></P
></LI
><LI
><P
><A
HREF="internal.html#READPIPEREF"
>Piping
        output of <I
CLASS="FIRSTTERM"
>cat</I
></A
>
        to <I
CLASS="FIRSTTERM"
>read</I
></P
></LI
><LI
><P
><A
HREF="x17837.html#HSREAD"
><SPAN
CLASS="QUOTE"
>"Prepending"</SPAN
>
	   text</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#BADREAD0"
>         Problems piping <I
CLASS="FIRSTTERM"
>echo</I
></A
>
	 to <I
CLASS="FIRSTTERM"
>read</I
></P
></LI
><LI
><P
><A
HREF="internal.html#READREDIR0"
>Redirection from a
        file</A
> to <I
CLASS="FIRSTTERM"
>read</I
></P
></LI
><LI
><P
><A
HREF="internalvariables.html#REPLYREF"
><TT
CLASS="VARNAME"
>$REPLY</TT
></A
>,
	default <I
CLASS="FIRSTTERM"
>read</I
> variable</P
></LI
><LI
><P
><A
HREF="internal.html#READTIMED"
>Timed
        input</A
></P
></LI
><LI
><P
><A
HREF="loops1.html#WHILEREADREF2"
>         <I
CLASS="FIRSTTERM"
>while read</I
></A
>
         construct</P
></LI
></UL
></P
><P
><A
HREF="internal.html#READLINEREF"
>readline</A
> library</P
><P
><A
HREF="localvar.html#RECURSIONREF"
>Recursion</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="localvar.html#RECURSIONDEMO0"
>Demonstration of</A
></P
></LI
><LI
><P
><A
HREF="localvar.html#FACTORIALREF"
>Factorial</A
></P
></LI
><LI
><P
><A
HREF="recurnolocvar.html#FIBOREF"
>Fibonacci
        sequence</A
></P
></LI
><LI
><P
><A
HREF="localvar.html#LOCVARRECUR"
>Local
        variables</A
></P
></LI
><LI
><P
><A
HREF="recursionsct.html#SCRIPTRECURSION"
>Script
        calling itself recursively</A
></P
></LI
><LI
><P
><A
HREF="recurnolocvar.html#HANOIREF"
>Towers
        of Hanoi</A
></P
></LI
></UL
></P
><P
>Redirection
         <P
></P
><UL
><LI
><P
><A
HREF="redircb.html#REDIRREF"
>Code
         blocks</A
></P
></LI
><LI
><P
><A
HREF="x17974.html#USINGEXECREF"
>exec
        &#60;<TT
CLASS="FILENAME"
>filename</TT
></A
>,</P
><P
>to reassign
        <A
HREF="io-redirection.html#FDREF"
>file descriptors</A
></P
></LI
><LI
><P
><A
HREF="ioredirintro.html"
>Introductory-level
	   explanation</A
> of <I
CLASS="FIRSTTERM"
>I/O
	   redirection</I
></P
></LI
><LI
><P
><A
HREF="io-redirection.html#IOREDIRECTIONREF2"
>	   Open a file</A
> for <EM
>both</EM
>
	   reading and writing</P
><P
><TT
CLASS="FILENAME"
>&#60;&#62;filename</TT
>
	   </P
></LI
><LI
><P
><A
HREF="internal.html#READREDIR0"
><I
CLASS="FIRSTTERM"
>read</I
>
        input redirected</A
> from a file</P
></LI
><LI
><P
>         <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>	    <TT
CLASS="FILENAME"
>stderr</TT
> to
	    <TT
CLASS="FILENAME"
>stdout</TT
></A
></P
><P
><TT
CLASS="FILENAME"
>2&#62;&#38;1 </TT
></P
></LI
><LI
><P
><A
HREF="special-chars.html#COXEX"
><TT
CLASS="FILENAME"
>stdin</TT
> /
         <TT
CLASS="FILENAME"
>stdout</TT
></A
>,
         using <B
CLASS="COMMAND"
> - </B
></P
></LI
><LI
><P
><A
HREF="complexfunct.html#REDSTDINFUNC1"
>         <TT
CLASS="FILENAME"
>stdin</TT
>of a
         <I
CLASS="FIRSTTERM"
>function</I
></A
></P
></LI
><LI
><P
><A
HREF="io-redirection.html#IOREDIRECTIONREF"
>         <TT
CLASS="FILENAME"
>stdout</TT
> to a file</A
></P
><P
><TT
CLASS="REPLACEABLE"
><I
>&#62;</I
></TT
> ... <TT
CLASS="REPLACEABLE"
><I
>&#62;&#62;</I
></TT
>
	 </P
></LI
><LI
><P
>        <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>	<TT
CLASS="FILENAME"
>stdout</TT
> to
	<I
CLASS="FIRSTTERM"
>file descriptor</I
></A
>
	<I
CLASS="FIRSTTERM"
>j</I
></P
><P
><TT
CLASS="FILENAME"
>&#62;&#38;j </TT
></P
></LI
><LI
><P
>        <A
HREF="io-redirection.html#IOREDIRECTIONREF1"
>	file descriptor<TT
CLASS="FILENAME"
>i</TT
> to
	<I
CLASS="FIRSTTERM"
>file descriptor</I
></A
>
	<I
CLASS="FIRSTTERM"
>j</I
></P
><P
><TT
CLASS="FILENAME"
>i&#62;&#38;j </TT
></P
></LI
><LI
><P
>         <A
HREF="special-chars.html#REDIROUTERROR2"
><TT
CLASS="FILENAME"
>stdout</TT
>
	  of a command</A
> to <TT
CLASS="FILENAME"
>stderr</TT
></P
><P
><TT
CLASS="FILENAME"
>&#62;&#38;2</TT
></P
></LI
><LI
><P
>         <A
HREF="special-chars.html#REDIROUTERROR"
><TT
CLASS="FILENAME"
>stdout</TT
>
         <EM
>and</EM
> <TT
CLASS="FILENAME"
>stderr</TT
>
	 of a command</A
> to a file</P
><P
><TT
CLASS="FILENAME"
>&#38;&#62; </TT
></P
></LI
><LI
><P
>         <A
HREF="extmisc.html#TEEREF"
>tee</A
>, redirect to a file
	    output of command(s) partway through a <A
HREF="special-chars.html#PIPEREF"
>pipe</A
></P
></LI
></UL
></P
><P
><A
HREF="refcards.html"
>Reference Cards</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="refcards.html#MISCTAB"
>Miscellaneous
	  constructs</A
></P
></LI
><LI
><P
><A
HREF="refcards.html#PARSUBTAB"
>Parameter
	  substitution/expansion</A
></P
></LI
><LI
><P
><A
HREF="refcards.html#SPECSHVARTAB"
>Special shell
           variables</A
></P
></LI
><LI
><P
><A
HREF="refcards.html#STRINGOPSTAB"
>String
	  operations</A
></P
></LI
><LI
><P
>Test operators</P
><P
><A
HREF="refcards.html#BINCOMPTAB"
>Binary comparison</A
></P
><P
><A
HREF="refcards.html#FILESTAB"
>Files</A
></P
></LI
></UL
></P
><P
><A
HREF="regexp.html#REGEXREF"
><I
CLASS="FIRSTTERM"
>Regular
         Expressions</I
></A
>
	    <P
></P
><UL
><LI
><P
><B
CLASS="COMMAND"
>^ </B
> (caret)
           <A
HREF="special-chars.html#BEGLINEREF"
>Beginning-of-line</A
>
	   </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>$ </B
> (dollar sign)
        <A
HREF="x17129.html#DOLLARSIGNREF"
><I
CLASS="FIRSTTERM"
>Anchor</I
></A
>
           </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>. </B
> (dot)
           <A
HREF="x17129.html#REGEXDOT"
>Match single
	   character</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>* </B
> (asterisk)
           <A
HREF="special-chars.html#ASTERISKREF2"
>Any number of
	   characters</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>[ ]</B
> (brackets) <A
HREF="x17129.html#BRACKETSREF"
>Enclose character set
        to match</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>\ </B
> (backslash) <A
HREF="x17129.html#REGEXBS"
>Escape</A
>, interpret following
	 character literally</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>\&#60; ... \&#62; </B
>
	   (angle brackets, <I
CLASS="FIRSTTERM"
>escaped</I
>)
           <A
HREF="x17129.html#ANGLEBRAC"
>Word boundary</A
></P
></LI
><LI
><P
><A
HREF="x17129.html#EXTREGEX"
>Extended</A
>
             REs</P
><P
><B
CLASS="COMMAND"
>+ </B
>
            <A
HREF="x17129.html#PLUSREF"
><I
CLASS="FIRSTTERM"
>Character
            match</I
></A
></P
><P
><B
CLASS="COMMAND"
>\{ \} </B
> <A
HREF="x17129.html#ESCPCB"
>Escaped
              <SPAN
CLASS="QUOTE"
>"curly"</SPAN
> brackets</A
></P
><P
><B
CLASS="COMMAND"
>[:   :] </B
> <A
HREF="x17129.html#POSIXREF"
>POSIX character classes</A
></P
></LI
></UL
></P
><P
><A
HREF="internalvariables.html#REPLYREF"
><TT
CLASS="VARNAME"
>$REPLY</TT
></A
>,
         Default value associated with <A
HREF="internal.html#READREF"
>read</A
>
         command</P
><P
><A
HREF="restricted-sh.html#RESTRICTEDSHREF"
>Restricted shell</A
>,
         shell (or script) with certain commands disabled</P
><P
><A
HREF="complexfunct.html#RETURNREF"
>return</A
>,
         command that terminates a <A
HREF="functions.html#FUNCTIONREF"
>function</A
></P
><P
><A
HREF="extmisc.html#RUNPARTSREF"
>run-parts</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="assortedtips.html#RUNPARTSREF2"
>Running scripts
          in sequence</A
>, without user intervention</P
></LI
></UL
></P
><P
>* * *</P
><P
><A
HREF="subshells.html#SCOPEREF"
>Scope</A
> of a variable,
         definition</P
><P
><A
HREF="options.html#INVOCATIONOPTIONSREF"
>Script options</A
>,
         set at command line</P
><P
><A
HREF="assortedtips.html#LIBROUTINES"
>Scripting routines</A
>,
        library of useful definitions and <A
HREF="functions.html#FUNCTIONREF"
>functions</A
></P
><P
><A
HREF="internalvariables.html#SECPROMPTREF"
>Secondary prompt</A
>,
         <B
CLASS="COMMAND"
><TT
CLASS="VARNAME"
>$PS2</TT
></B
></P
><P
><A
HREF="securityissues.html"
>Security issues</A
>
	   <P
></P
><UL
><LI
><P
><A
HREF="system.html#NMAPREF"
>nmap</A
>,
        <I
CLASS="FIRSTTERM"
>network mapper</I
>
	/ port scanner</P
></LI
><LI
><P
><A
HREF="system.html#SUDOREF"
>sudo</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#SUIDSCR"
><I
CLASS="FIRSTTERM"
>suid</I
>
           commands inside a script</A
></P
></LI
><LI
><P
><A
HREF="securityissues.html#INFECTEDSCRIPTS1"
>Viruses,
        trojans, and worms</A
> in scripts</P
></LI
><LI
><P
><A
HREF="securityissues.html#SECURITYTIPS1"
>Writing
        secure scripts</A
></P
></LI
></UL
></P
><P
><A
HREF="sedawk.html#SEDREF"
>sed</A
>,
         pattern-based programming language
	    <P
></P
><UL
><LI
><P
><A
HREF="x23170.html#SEDBASICTABLE"
><B
CLASS="COMMAND"
>Table</B
></A
>,
         basic operators</P
></LI
><LI
><P
><A
HREF="x23170.html#SEDOPTABLE"
><B
CLASS="COMMAND"
>Table</B
></A
>,
         examples of operators</P
></LI
></UL
></P
><P
><A
HREF="testbranch.html#SELECTREF"
>select</A
>,
         construct for menu building
	    <P
></P
><UL
><LI
><P
><A
HREF="testbranch.html#INLISTOMIT"
><TT
CLASS="USERINPUT"
><B
>in
         <TT
CLASS="REPLACEABLE"
><I
>list</I
></TT
></B
></TT
> omitted</A
>
	 </P
></LI
></UL
></P
><P
><A
HREF="system.html#SEMAPHOREREF"
>Semaphore</A
></P
><P
><A
HREF="loops1.html#NEEDSEMICOLON"
>Semicolon required</A
>,
         when <A
HREF="loops1.html#DOINREF"
>do</A
>
         <I
CLASS="FIRSTTERM"
>keyword</I
> is on first line of <A
HREF="loops1.html#FORLOOPREF1"
>loop</A
>
             <P
></P
><UL
><LI
><P
><A
HREF="gotchas.html#OMITSEMICOLON"
>When
         terminating <I
CLASS="FIRSTTERM"
>curly-bracketed</I
>
	 code block</A
></P
></LI
></UL
></P
><P
><A
HREF="extmisc.html#SEQREF"
>seq</A
>,
        Emit a sequence of integers. Equivalent to <A
HREF="extmisc.html#JOTREF"
>jot</A
>.</P
><P
><A
HREF="internal.html#SETREF"
>set</A
>,
         Change value of internal script variables
         <P
></P
><UL
><LI
><P
><A
HREF="debugging.html#UNDVARERR"
>set -u</A
>,
        Abort script with error message if attempting to use
	an <I
CLASS="FIRSTTERM"
>undeclared</I
> variable.</P
></LI
></UL
>
	   </P
><P
><A
HREF="part1.html#WHATSASCRIPT"
>Shell script</A
>,
         definition of</P
><P
><A
HREF="wrapper.html#SHWRAPPER"
>Shell wrapper</A
>,
         script embedding a command or utility</P
><P
><A
HREF="othertypesv.html#SHIFTREF"
>shift</A
>, reassigning
         <I
CLASS="FIRSTTERM"
>positional parameters</I
></P
><P
><A
HREF="internalvariables.html#SHLVLREF"
><TT
CLASS="VARNAME"
>$SHLVL</TT
></A
>,
            <I
CLASS="FIRSTTERM"
>shell level</I
>, depth to which the shell
            (or script) is nested</P
><P
><A
HREF="internal.html#SHOPTREF"
>shopt</A
>,
        change <I
CLASS="FIRSTTERM"
>shell options</I
></P
><P
><A
HREF="debugging.html#SIGNALD"
>Signal</A
>,
         a message sent to a process</P
><P
>Simulations
         <P
></P
><UL
><LI
><P
><A
HREF="randomvar.html#BROWNIANREF"
>Brownian
        motion</A
></P
></LI
><LI
><P
><A
HREF="randomvar.html#BROWNIANREF"
>Galton
        board</A
></P
></LI
><LI
><P
><A
HREF="colorizing.html#HORSERACEREF"
>Horserace</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#LIFEREF"
><EM
>Life</EM
></A
>,
        game of</P
></LI
><LI
><P
><A
HREF="mathc.html#CANNONREF"
>PI</A
>,
         approximating by firing cannonballs</P
></LI
><LI
><P
><A
HREF="arrays.html#STACKEX0"
>Pushdown
        <I
CLASS="FIRSTTERM"
>stack</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="varsubn.html#SNGLQUO"
>Single quotes</A
>
         (<B
CLASS="COMMAND"
>' ... '</B
>) <I
CLASS="FIRSTTERM"
>strong</I
> <A
HREF="quoting.html#QUOTINGREF"
>quoting</A
></P
><P
><A
HREF="devref1.html#SOCKETREF"
>Socket</A
>, a communication
         node associated with an I/O port</P
><P
>Sorting
         <P
></P
><UL
><LI
><P
><A
HREF="arrays.html#BUBBLESORT"
>Bubble
        sort</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#INSERTIONSORT0"
>Insertion
        sort</A
></P
></LI
></UL
></P
><P
><A
HREF="internal.html#SOURCEREF"
>source</A
>,
        execute a script or, within a script, import a file
	  <P
></P
><UL
><LI
><P
><A
HREF="internal.html#SOURCEPARAMS"
>Passing positional
        parameters</A
></P
></LI
></UL
></P
><P
><I
CLASS="FIRSTTERM"
>Spam</I
>, dealing with
          <P
></P
><UL
><LI
><P
><A
HREF="communications.html#SPAMLOOKUP_0"
><I
CLASS="FIRSTTERM"
>Example
        script</I
></A
></P
></LI
><LI
><P
><A
HREF="communications.html#ISSPAMMER_0"
><I
CLASS="FIRSTTERM"
>Example
        script</I
></A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#ISSPAMMER2_0"
><I
CLASS="FIRSTTERM"
>Example
        script</I
></A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#WHX0"
><I
CLASS="FIRSTTERM"
>Example
        script</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="special-chars.html#SCHARLIST1"
>Special characters</A
></P
><P
>Stack
        <P
></P
><UL
><LI
><P
><A
HREF="internalvariables.html#STACKDEFREF"
>Definition</A
></P
></LI
><LI
><P
>Emulating a <I
CLASS="FIRSTTERM"
>push-down stack</I
>,
          <A
HREF="arrays.html#STACKEX0"
>example script</A
></P
></LI
></UL
></P
><P
>Standard Deviation, <A
HREF="contributed-scripts.html#STDDEV"
>example script</A
></P
><P
><A
HREF="files.html#FILESREF1"
>Startup files</A
>, Bash</P
><P
><A
HREF="ioredirintro.html#STDINOUTDEF"
><TT
CLASS="FILENAME"
>stdin</TT
>
         and <TT
CLASS="FILENAME"
>stdout</TT
></A
></P
><P
><A
HREF="contributed-scripts.html#STOPWATCH"
>Stopwatch</A
>,
        example script</P
><P
>Strings
         <P
></P
><UL
><LI
><P
>         <B
CLASS="COMMAND"
>=~ </B
>
      <A
HREF="bashver3.html#REGEXMATCHREF"
>String match operator</A
>
        </P
></LI
><LI
><P
><A
HREF="comparison-ops.html#SCOMPARISON1"
>Comparison</A
></P
></LI
><LI
><P
><A
HREF="parameter-substitution.html#PSOREX1"
>Length</A
></P
><P
><TT
CLASS="REPLACEABLE"
><I
>${#string}</I
></TT
></P
></LI
><LI
><P
><A
HREF="string-manipulation.html#STRINGMANIP"
>Manipulation</A
></P
></LI
><LI
><P
><A
HREF="string-manipulation.html#AWKSTRINGMANIP2"
>Manipulation</A
>,
         using <A
HREF="awk.html#AWKREF"
>awk</A
></P
></LI
><LI
><P
><A
HREF="comparison-ops.html#STRINGNOTNULL"
><I
CLASS="FIRSTTERM"
>Null</I
>
        string</A
>, testing for</P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#PROTECTLITERAL0"
>Protecting strings</A
>
	  from expansion and/or reinterpretation,
	  <I
CLASS="FIRSTTERM"
>script example</I
></P
><P
><A
HREF="contributed-scripts.html#UNPROTECTLITERAL0"
><I
CLASS="FIRSTTERM"
>Unprotecting</I
>
            strings</A
>,
	  <I
CLASS="FIRSTTERM"
>script example</I
></P
></LI
><LI
><P
><I
CLASS="FIRSTTERM"
>strchr()</I
>, <A
HREF="string-manipulation.html#SUBSTRINGINDEX2"
>equivalent of</A
></P
></LI
><LI
><P
><I
CLASS="FIRSTTERM"
>strlen()</I
>, <A
HREF="string-manipulation.html#STRLEN"
>equivalent of</A
></P
></LI
><LI
><P
><A
HREF="filearchiv.html#STRINGSREF"
>strings</A
> command,
        find printable strings in a binary or data file</P
></LI
><LI
><P
>Substring extraction</P
><P
><A
HREF="string-manipulation.html#SUBSTREXTR01"
>${string:position}</A
></P
><P
><A
HREF="string-manipulation.html#SUBSTREXTR02"
>${string:position:length}</A
></P
><P
><A
HREF="moreadv.html#EXPEXTRSUB"
>Using
	 <I
CLASS="FIRSTTERM"
>expr</I
></A
>
      </P
></LI
><LI
><P
><A
HREF="string-manipulation.html#SUBSTRINGINDEX2"
>Substring
         <I
CLASS="FIRSTTERM"
>index</I
></A
> (numerical position in
         string)</P
></LI
><LI
><P
><A
HREF="string-manipulation.html#EXPRPAREN"
>Substring
         <I
CLASS="FIRSTTERM"
>matching</I
></A
>, using
         <A
HREF="moreadv.html#EXPRREF"
>expr</A
></P
></LI
><LI
><P
><A
HREF="parameter-substitution.html#PSOREX1"
>Substring
           <I
CLASS="FIRSTTERM"
>removal</I
></A
></P
><P
><A
HREF="parameter-substitution.html#PSOREXSH"
>${var#Pattern}</A
></P
><P
><A
HREF="parameter-substitution.html#PSOREXLO"
>${var##Pattern}</A
></P
><P
><A
HREF="parameter-substitution.html#PCTREP1"
>${var%Pattern}</A
></P
><P
><A
HREF="parameter-substitution.html#PCTREP2"
>${var%%Pattern}</A
></P
></LI
><LI
><P
>Substring replacement</P
><P
><A
HREF="string-manipulation.html#SUBSTRREPL00"
>${string/substring/replacement}</A
></P
><P
><A
HREF="string-manipulation.html#SUBSTRREPL01"
>${string//substring/replacement}</A
></P
><P
><A
HREF="string-manipulation.html#SUBSTRREPL02"
>${string/#substring/replacement}</A
></P
><P
><A
HREF="string-manipulation.html#SUBSTRREPL03"
>${string/%substring/replacement}</A
>
      </P
><P
><A
HREF="contributed-scripts.html#DAYSBETWEEN0"
><I
CLASS="FIRSTTERM"
>Script
	  example</I
></A
></P
></LI
><LI
><P
><A
HREF="refcards.html#STRINGOPSTAB"
><B
CLASS="COMMAND"
>Table</B
></A
>
	  of <I
CLASS="FIRSTTERM"
>string/substring</I
> manipulation and
	  extraction operators</P
></LI
></UL
></P
><P
><A
HREF="varsubn.html#SNGLQUO"
><I
CLASS="FIRSTTERM"
>Strong</I
> quoting</A
>
         <B
CLASS="COMMAND"
>' ... '</B
></P
><P
><A
HREF="scrstyle.html"
>Stylesheet</A
>
        for writing scripts</P
><P
><A
HREF="subshells.html#SUBSHELLSREF"
>Subshell</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="subshells.html#SUBSHELLPARENS1"
>Command list within
        parentheses</A
></P
></LI
><LI
><P
><A
HREF="subshells.html#SUBSHNLEVREF"
>Variables</A
>,
        <TT
CLASS="VARNAME"
>$BASH_SUBSHELL</TT
> and
        <TT
CLASS="VARNAME"
>$SHLVL</TT
></P
></LI
><LI
><P
>Variables in a <I
CLASS="FIRSTTERM"
>subshell</I
></P
><P
><A
HREF="gotchas.html#VARSUBSH"
><I
CLASS="FIRSTTERM"
>scope</I
>
	  limited</A
>, but ...</P
><P
> ... <A
HREF="assortedtips.html#SUBSHTMP"
>can be accessed outside
          the subshell?</A
>
	</P
></LI
></UL
></P
><P
><A
HREF="system.html#SUREF"
>su</A
> <I
CLASS="FIRSTTERM"
>Substitute
        user</I
>, log on as a different user or as
	<I
CLASS="FIRSTTERM"
>root</I
></P
><P
><A
HREF="fto.html#SUIDREF"
>suid</A
> (<I
CLASS="FIRSTTERM"
>set user
         id</I
>) file flag
	   <P
></P
><UL
><LI
><P
><A
HREF="gotchas.html#SUIDSCR"
><I
CLASS="FIRSTTERM"
>suid</I
>
         commands inside a script</A
>, not advisable</P
></LI
></UL
></P
><P
><A
HREF="basic.html#SYMLINKREF"
>Symbolic links</A
></P
><P
><A
HREF="zeros.html#SWAPFILEREF"
>Swapfiles</A
></P
><P
>* * *</P
><P
><A
HREF="tabexpansion.html"
>Tab completion</A
></P
><P
>Table lookup, <A
HREF="bashver2.html#RESISTOR"
>script
        example</A
></P
><P
><A
HREF="textproc.html#TAILREF"
>tail</A
>, <I
CLASS="FIRSTTERM"
>echo</I
>
        to <TT
CLASS="FILENAME"
>stdout</TT
> lines at the (tail) end of a text
        file</P
><P
><A
HREF="filearchiv.html#TARREF"
>tar</A
>, archiving utility</P
><P
><A
HREF="extmisc.html#TEEREF"
>tee</A
>, redirect to a file
	output of command(s) partway through a <A
HREF="special-chars.html#PIPEREF"
>pipe</A
></P
><P
><A
HREF="system.html#TERMINALSSYS1"
>Terminals</A
>
         <P
></P
><UL
><LI
><P
><A
HREF="system.html#SETSERIALREF"
>setserial</A
></P
></LI
><LI
><P
><A
HREF="system.html#SETTERMREF"
>setterm</A
></P
></LI
><LI
><P
><A
HREF="system.html#STTYREF"
>stty</A
></P
></LI
><LI
><P
><A
HREF="terminalccmds.html#TPUTREF"
>tput</A
></P
></LI
><LI
><P
><A
HREF="system.html#WALLREF"
>wall</A
></P
></LI
></UL
></P
><P
><I
CLASS="FIRSTTERM"
>test</I
> command
         <P
></P
><UL
><LI
><P
><A
HREF="testconstructs.html#TTESTREF"
>Bash
        <I
CLASS="FIRSTTERM"
>builtin</I
></A
></P
></LI
><LI
><P
><A
HREF="testconstructs.html#USRBINTEST"
>external
        command</A
>, <TT
CLASS="FILENAME"
>/usr/bin/test</TT
>
        (equivalent to <TT
CLASS="FILENAME"
>/usr/bin/[</TT
>)</P
></LI
></UL
></P
><P
><A
HREF="testconstructs.html#TESTCONSTRUCTS1"
>Test constructs</A
></P
><P
>Test operators
         <P
></P
><UL
><LI
><P
><B
CLASS="COMMAND"
>-a </B
>
        <A
HREF="comparison-ops.html#COMPOUNDAND"
>Logical AND</A
>
	compound comparison</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-e </B
>
        <A
HREF="fto.html#RTIF"
>File exists</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-eq </B
>
         <A
HREF="comparison-ops.html#EQUALREF"
>is-equal-to</A
> (integer
	 comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-f </B
>
        <A
HREF="fto.html#REGULARFILE"
>File is a <I
CLASS="FIRSTTERM"
>regular</I
>
	file</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-ge </B
>
         <A
HREF="comparison-ops.html#GE0REF"
>greater-than or equal</A
>
	 (integer comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-gt </B
>
         <A
HREF="comparison-ops.html#GT0REF"
>greater-than</A
> (integer
	 comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-le </B
>
         <A
HREF="comparison-ops.html#LE0REF"
>less-than or equal</A
>
	 (integer comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-lt </B
>
         <A
HREF="comparison-ops.html#LT0REF"
>less-than</A
>
	 (integer comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-n </B
>
        <A
HREF="comparison-ops.html#STRINGNOTNULL"
>not-zero-length</A
>
	(string comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-ne </B
>
         <A
HREF="comparison-ops.html#NEQUALREF"
>not-equal-to</A
>
	 (integer comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-o </B
>
        <A
HREF="comparison-ops.html#COMPOUNDOR"
>Logical OR</A
>
	compound comparison</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-u </B
>
        <A
HREF="fto.html#SUIDREF"
><I
CLASS="FIRSTTERM"
>suid</I
>
	flag set</A
>, file test</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>-z </B
>
        <A
HREF="comparison-ops.html#STRINGNULL"
>is-zero-length</A
>
	(string comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>= </B
>
           <A
HREF="comparison-ops.html#SCOMPARISON1"
>is-equal-to</A
>
	   (string comparison)</P
><P
><B
CLASS="COMMAND"
>== </B
>
                      <A
HREF="comparison-ops.html#SCOMPARISON2"
>is-equal-to</A
>
	              (string comparison)</P
></LI
><LI
><P
> <B
CLASS="COMMAND"
>&#60; </B
>
           <A
HREF="comparison-ops.html#LTREF"
>less-than</A
>
	   (string comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>&#60; </B
>
            <A
HREF="comparison-ops.html#INTLT"
>less-than</A
>,
	    (integer comparison, within
	    <A
HREF="dblparens.html"
>double parentheses</A
>)
          </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>&#60;= </B
>
            <A
HREF="comparison-ops.html#LTEQ"
>less-than-or-equal</A
>,
	    (integer comparison, within
	    <I
CLASS="FIRSTTERM"
>double parentheses</I
>)
          </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>&#62; </B
>
            <A
HREF="comparison-ops.html#GTREF"
>greater-than</A
>
	    (string comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>&#62; </B
>
            <A
HREF="comparison-ops.html#INTGT"
>greater-than</A
>,
            (integer comparison, within
            <I
CLASS="FIRSTTERM"
>double parentheses</I
>)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>&#62;= </B
>
            <A
HREF="comparison-ops.html#GTEQ"
>greater-than-or-equal</A
>,
	    (integer comparison, within
	    <I
CLASS="FIRSTTERM"
>double parentheses</I
>)
          </P
></LI
><LI
><P
><B
CLASS="COMMAND"
>|| </B
>
         <A
HREF="ops.html#ORREF"
>Logical OR </A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>&#38;&#38; </B
>
	    <A
HREF="special-chars.html#LOGICALAND"
>Logical AND</A
></P
></LI
><LI
><P
><B
CLASS="COMMAND"
>! </B
>
         <A
HREF="special-chars.html#NOTREF"
>Negation operator</A
>, inverts <A
HREF="exit-status.html#EXITSTATUSREF"
>exit status</A
> of a
	 test</P
><P
><B
CLASS="COMMAND"
>!= </B
>
                   <A
HREF="comparison-ops.html#NOTEQUAL"
>not-equal-to</A
>
                   (string comparison)</P
></LI
><LI
><P
><B
CLASS="COMMAND"
>Tables</B
> of <I
CLASS="FIRSTTERM"
>test</I
>
	  operators</P
><P
><A
HREF="refcards.html#BINCOMPTAB"
>Binary comparison</A
></P
><P
><A
HREF="refcards.html#FILESTAB"
>File</A
></P
></LI
></UL
></P
><P
><A
HREF="textproc.html"
>Text and text file
        processing</A
></P
><P
><A
HREF="timedate.html"
>Time / Date</A
></P
><P
>Timed input
         <P
></P
><UL
><LI
><P
><A
HREF="internal.html#READTIMED"
>Using
        <I
CLASS="FIRSTTERM"
>read -t</I
></A
></P
></LI
><LI
><P
><A
HREF="internalvariables.html#STTYTO"
>Using
        <I
CLASS="FIRSTTERM"
>stty</I
></A
></P
></LI
><LI
><P
><A
HREF="internalvariables.html#TIMINGLOOP"
>Using
        timing loop</A
></P
></LI
><LI
><P
><A
HREF="internalvariables.html#TMOUTREF"
>Using
        <TT
CLASS="VARNAME"
>$TMOUT</TT
></A
></P
></LI
></UL
></P
><P
><A
HREF="assortedtips.html"
>Tips and hints</A
>
        for Bash scripts
	   <P
></P
><UL
><LI
><P
>Array, <A
HREF="assortedtips.html#RETARRAY"
>as
        <I
CLASS="FIRSTTERM"
>return value</I
> from
	a function</A
></P
><P
><I
CLASS="FIRSTTERM"
>Associative</I
> array
	<A
HREF="optimizations.html#ASSOCARRTST"
>more efficient</A
>
	than a numerically-indexed array</P
></LI
><LI
><P
><A
HREF="complexfunct.html#CAPTURERETVAL"
>Capturing
        the return value</A
> of a function, using
	<I
CLASS="FIRSTTERM"
>echo</I
></P
></LI
><LI
><P
><A
HREF="networkprogramming.html#CGISCRIPT"
><I
CLASS="FIRSTTERM"
>CGI</I
>
        programming</A
>, using scripts for</P
></LI
><LI
><P
>Comment blocks</P
><P
>Using <A
HREF="here-docs.html#CBLOCK1"
><I
CLASS="FIRSTTERM"
>anonymous
	  here documents</I
></A
></P
><P
>Using <A
HREF="assortedtips.html#COMOUTBL"
> <I
CLASS="FIRSTTERM"
>if-then</I
>
	constructs</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#COMMENTH"
>Comment headers</A
>,
        special purpose</P
></LI
><LI
><P
><A
HREF="assortedtips.html#CSTYLE"
><I
CLASS="FIRSTTERM"
>C</I
>-style syntax </A
>,
        for manipulating variables</P
></LI
><LI
><P
><A
HREF="x23170.html#DOUBLESPACE"
>Double-spacing a text
        file</A
></P
></LI
><LI
><P
>Filenames prefixed with a dash,
        <A
HREF="basic.html#DASHREM"
>removing</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#FILTEROUTP"
>Filter</A
>,
         feeding output back to <EM
>same</EM
>
         filter</P
></LI
><LI
><P
>Function<A
HREF="assortedtips.html#RVT"
>        <I
CLASS="FIRSTTERM"
>return</I
> value
	workarounds</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#IFGREPFIX"
><I
CLASS="FIRSTTERM"
>if-grep</I
>
        test fixup</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#LIBROUTINES"
>Library</A
>
        of useful definitions and
        <I
CLASS="FIRSTTERM"
>functions</I
></P
></LI
><LI
><P
><A
HREF="othertypesv.html#NULLVAR"
><I
CLASS="FIRSTTERM"
>null</I
>
        variable assignment</A
>, avoiding</P
></LI
><LI
><P
><A
HREF="assortedtips.html#PASSARRAY"
>Passing
        an <I
CLASS="FIRSTTERM"
>array</I
></A
> to a
        function</P
></LI
><LI
><P
><TT
CLASS="VARNAME"
>$PATH</TT
>,
        appending to, <A
HREF="bashver3.html#PATHAPPEND"
>using the
        <TT
CLASS="VARNAME"
>+=</TT
> operator</A
>.</P
></LI
><LI
><P
><A
HREF="assortedtips.html#PREPENDREF"
><I
CLASS="FIRSTTERM"
>Prepending</I
></A
>
        lines at head of a file</P
></LI
><LI
><P
><A
HREF="assortedtips.html#PROGRESSBAR"
>Progress
        bar</A
> template</P
></LI
><LI
><P
><A
HREF="assortedtips.html#PSEUDOCODEREF"
>Pseudo-code</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#RCSREF"
>rcs</A
></P
></LI
><LI
><P
><A
HREF="special-chars.html#DEVNULLREDIRECT"
>Redirecting a <I
CLASS="FIRSTTERM"
>test</I
>
	to <TT
CLASS="FILENAME"
>/dev/null</TT
></A
> to suppress output</P
></LI
><LI
><P
><A
HREF="assortedtips.html#RUNPARTSREF2"
>Running scripts in
        sequence</A
> without user intervention, using <A
HREF="extmisc.html#RUNPARTSREF"
>run-parts</A
></P
></LI
><LI
><P
>Script<A
HREF="assortedtips.html#SCRIPTASEMB"
> as embedded
        command</A
></P
></LI
><LI
><P
>Script <I
CLASS="FIRSTTERM"
>portability</I
></P
><P
><A
HREF="assortedtips.html#SETPUM"
>Setting <I
CLASS="FIRSTTERM"
>path</I
>
	  and <I
CLASS="FIRSTTERM"
>umask</I
></A
></P
><P
><A
HREF="assortedtips.html#WHATISREF3"
>Using <I
CLASS="FIRSTTERM"
>whatis</I
></A
>
	  </P
></LI
><LI
><P
><A
HREF="assortedtips.html#SETVAREMB"
>Setting script variable</A
>
	to a block of embedded <I
CLASS="FIRSTTERM"
>sed</I
> or
	<I
CLASS="FIRSTTERM"
>awk</I
> code</P
></LI
><LI
><P
>Speeding up script execution by <A
HREF="optimizations.html#LCALL"
>disabling <I
CLASS="FIRSTTERM"
>unicode</I
></A
>
	 </P
></LI
><LI
><P
>Subshell variable,
        <A
HREF="assortedtips.html#SUBSHTMP"
>accessing outside the subshell</A
>
	</P
></LI
><LI
><P
><A
HREF="assortedtips.html#INTPARAM"
>Testing a variable</A
>
        to see if it contains only digits</P
></LI
><LI
><P
><A
HREF="special-chars.html#DEVNULLREDIRECT"
>Testing whether
        a command exists</A
>, using <A
HREF="internal.html#TYPEREF"
>type</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#TRACKINGSCR"
>Tracking script
        usage</A
></P
></LI
><LI
><P
><A
HREF="process-sub.html#GOODREAD0"
><I
CLASS="FIRSTTERM"
>while-read</I
> loop
	 without a
	 <I
CLASS="FIRSTTERM"
>subshell</I
></A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#WIDGETREF"
>Widgets</A
>, invoking from a
	script</P
></LI
></UL
></P
><P
><A
HREF="internalvariables.html#TMOUTREF"
><TT
CLASS="VARNAME"
>$TMOUT</TT
></A
>,
        Timeout interval</P
><P
><A
HREF="testconstructs.html#TOKENREF"
>Token</A
>, a symbol that may
        expand to a <A
HREF="internal.html#KEYWORDREF"
>keyword</A
> or
        command</P
><P
><A
HREF="terminalccmds.html#TPUTREF"
>tput</A
>, terminal-control
        command</P
><P
><A
HREF="textproc.html#TRREF"
>tr</A
>, character translation filter
         <P
></P
><UL
><LI
><P
><A
HREF="textproc.html#TRD2U"
>DOS to Unix text file
        conversion</A
></P
></LI
><LI
><P
><A
HREF="textproc.html#TROPTIONS"
>Options</A
></P
></LI
><LI
><P
><A
HREF="contributed-scripts.html#SOUNDEX0"
>Soundex</A
>, <I
CLASS="FIRSTTERM"
>example
        script</I
></P
></LI
><LI
><P
><A
HREF="textproc.html#TRVARIANTS"
>Variants</A
></P
></LI
></UL
></P
><P
><A
HREF="debugging.html#TRAPREF1"
><I
CLASS="FIRSTTERM"
>Trap</I
></A
>,
         specifying an action upon receipt of a <A
HREF="debugging.html#SIGNALD"
>signal</A
></P
><P
><I
CLASS="FIRSTTERM"
>Trinary (ternary)</I
> operator,
         <I
CLASS="FIRSTTERM"
>C</I
>-style,
	 <TT
CLASS="USERINPUT"
><B
>var&#62;10?88:99</B
></TT
>
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#CSTRINARY"
>in
        <I
CLASS="FIRSTTERM"
>double-parentheses</I
>
        construct</A
></P
></LI
><LI
><P
><A
HREF="internal.html#EX46"
>in <I
CLASS="FIRSTTERM"
>let</I
>
        construct</A
></P
></LI
></UL
></P
><P
><A
HREF="internal.html#TRUEREF"
>true</A
>,
        returns <I
CLASS="FIRSTTERM"
>successful</I
> (0) <A
HREF="exit-status.html#EXITSTATUSREF"
>exit status</A
></P
><P
><A
HREF="declareref.html#DECLARE1REF"
>typeset</A
> builtin
         <P
></P
><UL
><LI
><P
><A
HREF="declareref.html#DECLAREOPSREF1"
>options</A
></P
></LI
></UL
></P
><P
>* * *</P
><P
><A
HREF="internalvariables.html#UIDREF"
><TT
CLASS="VARNAME"
>$UID</TT
></A
>,
         User ID number</P
><P
><A
HREF="aliases.html#UNALIASREF"
>unalias</A
>,
        to remove an <A
HREF="aliases.html#ALIASREF"
>alias</A
></P
><P
><A
HREF="system.html#UNAMEREF"
>uname</A
>,
        output system information</P
><P
><A
HREF="bashver4.html#UNICODEREF"
>Unicode</A
>, encoding standard
        for representing letters and symbols
         <P
></P
><UL
><LI
><P
><A
HREF="optimizations.html#LCALL"
>Disabling <I
CLASS="FIRSTTERM"
>unicode</I
></A
>
	 to optimize script</P
></LI
></UL
></P
><P
><A
HREF="gotchas.html#UNINITVAR"
>Uninitialized variables</A
> </P
><P
><A
HREF="textproc.html#UNIQREF"
>uniq</A
>,
        filter to remove duplicate lines from a sorted file</P
><P
><A
HREF="internal.html#UNSETREF"
>unset</A
>,
         delete a shell variable</P
><P
><A
HREF="loops1.html#UNTILLOOPREF"
>until</A
> loop</P
><P
><I
CLASS="FIRSTTERM"
>until [ condition-is-true ]; do</I
></P
><P
>* * *</P
><P
><I
CLASS="FIRSTTERM"
>Variables</I
>

         <P
></P
><UL
><LI
><P
><A
HREF="arrays.html#ARRAYOPSVARS"
>Array operations on
        </A
></P
></LI
><LI
><P
><A
HREF="ops.html#ASNOP1"
>Assignment</A
></P
><P
><A
HREF="varassignment.html#EX15_0"
><I
CLASS="FIRSTTERM"
>Script
          example</I
></A
></P
><P
><A
HREF="varassignment.html#EX16_0"
><I
CLASS="FIRSTTERM"
>Script
          example</I
></A
></P
><P
><A
HREF="varsubn.html#VARUNSETTING"
><I
CLASS="FIRSTTERM"
>Script
          example</I
></A
></P
></LI
><LI
><P
><A
HREF="internalvariables.html"
><I
CLASS="FIRSTTERM"
>Bash</I
>
        internal variables</A
></P
></LI
><LI
><P
><A
HREF="assortedtips.html#SETVAREMB"
>Block of <I
CLASS="FIRSTTERM"
>sed</I
> or
	<I
CLASS="FIRSTTERM"
>awk</I
> code</A
>, setting a variable
	to</P
></LI
><LI
><P
>	<I
CLASS="FIRSTTERM"
>C-style</I
>
        <A
HREF="dblparens.html#PLUSPLUSREF"
>        increment/decrement/trinary operations</A
></P
></LI
><LI
><P
>        <A
HREF="internal.html#SETREF"
>Change value of internal script variables</A
>
        using <I
CLASS="FIRSTTERM"
>set</I
></P
></LI
><LI
><P
><A
HREF="declareref.html#DECLARE1REF"
>declare</A
>,
        to modify the properties of variables</P
></LI
><LI
><P
><A
HREF="internal.html#UNSETREF"
>Deleting a shell variable</A
>
         using <I
CLASS="FIRSTTERM"
>unset</I
></P
></LI
><LI
><P
><A
HREF="othertypesv.html#ENVREF"
>Environmental</A
></P
></LI
><LI
><P
><A
HREF="parameter-substitution.html#EXPREPL1"
>Expansion / Substring
        replacement</A
> operators</P
></LI
><LI
><P
><A
HREF="ivr.html#IVRREF"
>Indirect
          referencing</A
></P
><P
><TT
CLASS="REPLACEABLE"
><I
>eval variable1=\$$variable2</I
></TT
></P
><P
><A
HREF="ivr.html#IVR2"
>Newer notation</A
></P
><P
><TT
CLASS="REPLACEABLE"
><I
>${!variable}</I
></TT
></P
></LI
><LI
><P
><A
HREF="ops.html#INTVARREF"
>Integer</A
></P
></LI
><LI
><P
><A
HREF="untyped.html#BVUNTYPED"
>Integer / string</A
> (variables are
	untyped)</P
></LI
><LI
><P
><A
HREF="parameter-substitution.html#PSOREX1"
>Length</A
></P
><P
><TT
CLASS="REPLACEABLE"
><I
>${#var}</I
></TT
></P
></LI
><LI
><P
><A
HREF="varsubn.html#LVALUEREF"
>Lvalue</A
></P
></LI
><LI
><P
><A
HREF="parameter-substitution.html#PSSUB1"
>Manipulating and
        expanding</A
></P
></LI
><LI
><P
><A
HREF="varsubn.html#VARNAMEVAL"
><I
CLASS="FIRSTTERM"
>Name</I
>
        and <I
CLASS="FIRSTTERM"
>value</I
> of a variable</A
>,
	distinguishing between</P
></LI
><LI
><P
><A
HREF="comparison-ops.html#STRINGNOTNULL"
><I
CLASS="FIRSTTERM"
>Null</I
>
        string</A
>, testing for</P
></LI
><LI
><P
><A
HREF="othertypesv.html#NULLVAR"
><I
CLASS="FIRSTTERM"
>Null</I
>
        variable assignment</A
>, avoiding</P
></LI
><LI
><P
><A
HREF="quotingvar.html"
>Quoting</A
></P
><P
><A
HREF="gotchas.html#FAILQUOTE"
>within <I
CLASS="FIRSTTERM"
>test</I
>
          brackets</A
></P
><P
><A
HREF="quotingvar.html#WSQUO"
>to preserve
	  <I
CLASS="FIRSTTERM"
>whitespace</I
></A
></P
></LI
><LI
><P
><A
HREF="varsubn.html#LVALUEREF"
>rvalue</A
></P
></LI
><LI
><P
><A
HREF="varsubn.html#VARUNSETTING"
>Setting to <I
CLASS="FIRSTTERM"
>null</I
>
        value</A
></P
></LI
><LI
><P
><A
HREF="subshells.html#PARVIS"
>In
        <I
CLASS="FIRSTTERM"
>subshell</I
></A
>
	not visible to parent shell</P
></LI
><LI
><P
>Testing a variable <A
HREF="assortedtips.html#INTPARAM"
>        if it contains only digits</A
></P
></LI
><LI
><P
><A
HREF="declareref.html#TYPINGREF"
>Typing</A
>,
        restricting the properties of a variable</P
></LI
><LI
><P
><A
HREF="debugging.html#UNDVARERR"
>Undeclared</A
>,
        error message</P
></LI
><LI
><P
><A
HREF="varsubn.html#UNINITVAR1"
>Uninitialized</A
>
        </P
></LI
><LI
><P
><A
HREF="quotingvar.html#VARSPLITTING"
>Unquoted
	variable</A
>,
	<I
CLASS="FIRSTTERM"
>splitting</I
></P
></LI
><LI
><P
><A
HREF="internal.html#UNSETREF"
>Unsetting</A
></P
></LI
><LI
><P
><A
HREF="untyped.html#BVUNTYPED"
>Untyped</A
></P
></LI
></UL
></P
><P
>* * *</P
><P
><A
HREF="x9644.html#WAITREF"
>wait</A
>,
        suspend script execution
	   <P
></P
><UL
><LI
><P
><A
HREF="x9644.html#WAITHANG"
>To remedy
         script hang</A
></P
></LI
></UL
></P
><P
><A
HREF="varsubn.html#DBLQUO"
><I
CLASS="FIRSTTERM"
>Weak</I
> quoting</A
>
      <B
CLASS="COMMAND"
>" ... "</B
></P
><P
><A
HREF="loops1.html#WHILELOOPREF"
>while</A
> loop</P
><P
><I
CLASS="FIRSTTERM"
>while [ condition ]; do</I
>
         <P
></P
><UL
><LI
><P
><A
HREF="loops1.html#WHLOOPC"
>C-style syntax</A
>
        </P
></LI
><LI
><P
><A
HREF="loops1.html#WHILEFUNC"
>Calling a
        <I
CLASS="FIRSTTERM"
>function</I
> within
        <I
CLASS="FIRSTTERM"
>test</I
> brackets</A
></P
></LI
><LI
><P
><A
HREF="loops1.html#WHMULTCOND"
>Multiple
         conditions</A
></P
></LI
><LI
><P
><A
HREF="loops1.html#WHILENOBRACKETS"
>Omitting
        <I
CLASS="FIRSTTERM"
>test</I
> brackets</A
></P
></LI
><LI
><P
><A
HREF="loops1.html#WHILEREADREF2"
>           <I
CLASS="FIRSTTERM"
>while read</I
></A
>
           construct
	</P
><P
><A
HREF="process-sub.html#GOODREAD0"
>Avoiding a
	  <I
CLASS="FIRSTTERM"
>subshell</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="special-chars.html#WHITESPACEREF"
>Whitespace</A
>,
         spaces, tabs, and newline characters
         <P
></P
><UL
><LI
><P
><A
HREF="internalvariables.html#IFSWS"
><TT
CLASS="VARNAME"
>$IFS</TT
> defaults
        to</A
></P
></LI
><LI
><P
><A
HREF="gotchas.html#WSBAD"
>Inappropriate use
        of</A
></P
></LI
><LI
><P
><A
HREF="here-docs.html#INDENTEDLS"
>Preceding closing
        <I
CLASS="FIRSTTERM"
>limit string</I
></A
> in a <I
CLASS="FIRSTTERM"
>here
	document</I
>, error</P
></LI
><LI
><P
><A
HREF="special-chars.html#WSBCOMM"
>Preceding script
        comments</A
></P
></LI
><LI
><P
><A
HREF="quotingvar.html#WSQUO"
><I
CLASS="FIRSTTERM"
>Quoting</I
></A
>,
         to preserve <I
CLASS="FIRSTTERM"
>whitespace</I
> within strings
         or variables</P
></LI
><LI
><P
><A
HREF="x17129.html#WSPOSIX"
>[:space:]</A
>,
        <I
CLASS="FIRSTTERM"
>POSIX</I
> character class</P
></LI
></UL
></P
><P
><A
HREF="system.html#WHOREF"
>who</A
>, information about logged on users
          <P
></P
><UL
><LI
><P
><A
HREF="system.html#WREF"
>w</A
></P
></LI
><LI
><P
><A
HREF="system.html#WHOAMIREF"
>whoami</A
></P
></LI
><LI
><P
><A
HREF="system.html#LOGNAMEREF"
>logname</A
></P
></LI
></UL
></P
><P
><A
HREF="assortedtips.html#WIDGETREF"
>Widgets</A
></P
><P
><A
HREF="globbingref.html#WILDCARDDEF"
>Wild card</A
> characters
         <P
></P
><UL
><LI
><P
><A
HREF="special-chars.html#ASTERISKREF"
>Asterisk
        *</A
></P
></LI
><LI
><P
>In <A
HREF="loops1.html#LIGLOB"
>        <TT
CLASS="REPLACEABLE"
><I
>[list]</I
></TT
> constructs</A
>
        </P
></LI
><LI
><P
><A
HREF="special-chars.html#WILDCARDQU"
>Question mark
        ?</A
></P
></LI
><LI
><P
><A
HREF="globbingref.html#WDOTFILEWC"
>Will not match
        <TT
CLASS="FILENAME"
>dot files</TT
></A
></P
></LI
></UL
></P
><P
>Word splitting
         <P
></P
><UL
><LI
><P
><A
HREF="quotingvar.html#WSPLITREF"
>Definition</A
></P
></LI
><LI
><P
><A
HREF="commandsub.html#CSWS"
>Resulting from <I
CLASS="FIRSTTERM"
>command
	substitution</I
></A
></P
></LI
></UL
></P
><P
><A
HREF="wrapper.html#SHWRAPPER"
>Wrapper</A
>, shell</P
><P
>* * *</P
><P
><A
HREF="moreadv.html#XARGSREF"
>xargs</A
>,
         Filter for grouping arguments
         <P
></P
><UL
><LI
><P
><A
HREF="moreadv.html#XARGSCURLYREF"
>         Curly brackets</A
></P
></LI
><LI
><P
><A
HREF="moreadv.html#XARGSLIMARGS"
>         Limiting arguments passed</A
></P
></LI
><LI
><P
><A
HREF="moreadv.html#XARGSLIMARGS"
>Options</A
></P
></LI
><LI
><P
>Processes arguments <A
HREF="moreadv.html#XARGSONEATATIME"
>one at a time</A
></P
></LI
><LI
><P
><A
HREF="moreadv.html#XARGSWS"
>         Whitespace</A
>, handling</P
></LI
></UL
></P
><P
>* * *</P
><P
><A
HREF="extmisc.html#YESREF"
>yes</A
>
        <P
></P
><UL
><LI
><P
><A
HREF="extmisc.html#YESEMU"
>Emulation</A
></P
></LI
></UL
></P
><P
>* * *</P
><P
><B
CLASS="COMMAND"
>-z </B
>
        <A
HREF="comparison-ops.html#STRINGNULL"
>String is
	<I
CLASS="FIRSTTERM"
>null</I
></A
></P
><P
><A
HREF="x9644.html#ZOMBIEREF"
><I
CLASS="FIRSTTERM"
>Zombie</I
></A
>,
         a process that has terminated, but not yet been <A
HREF="x9644.html#KILLREF"
>killed</A
> by its
         <A
HREF="internal.html#PARENTREF"
>parent</A
></P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="asciitable.html"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>&nbsp;</TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>ASCII Table</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>&nbsp;</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>